методы стандартной библиотеки ArrayObj.mqh - страница 2

 
Vladimir Simakov:

Если ты ничего в своем коде не менял, то как раз CObject::Compare(...) не вызывается.

ничего не менял. Пройдитесь отладчиком внутрь

lCollNonUnique.Search(lMyObject1);


вызывается




//+------------------------------------------------------------------+
//|                                    CollObjectRemoveDublicate.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Object.mqh>
#include <Arrays\ArrayObj.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+

class CMyObject : public CObject
{
   public:
   int meInt;
   
 int Compare(const CMyObject *node,const int mode=0) const
  {
  const CMyObject* tmp=dynamic_cast<const CMyObject*>(node);
  return !tmp||this.meInt!=tmp.meInt?0:1;
}   
   
};

class CCollOfMyObjects : public CArrayObj
{
   public:
   bool  isIn(CMyObject *inObject);
};

bool CCollOfMyObjects::isIn(CMyObject *inObject)
{
   CMyObject *lMyObj;
   for(int i=0;i<this.Total();i++)
     {
     lMyObj = this.At(i);
      if(inObject.Compare(lMyObj,1))
        {
         return(true);
        }
     }
   return(false);
}

void OnStart()
  {
//---
   int lRez;
   CMyObject *lMyObject1, *lMyObject2, *lMyObject3, *lMyObject4, *lMyObject5;
   CCollOfMyObjects *lCollNonUnique;
   CCollOfMyObjects *lCollUnique;
   
   lMyObject1     = new CMyObject;
   lMyObject2     = new CMyObject;
   lMyObject3     = new CMyObject;
   lMyObject3     = new CMyObject;
   lMyObject4     = new CMyObject;
   lMyObject5     = new CMyObject;   
   
   
   lCollNonUnique = new CCollOfMyObjects;
   lCollUnique    = new CCollOfMyObjects;
   
   lMyObject1.meInt = 10;
   lMyObject2.meInt = 10;
   lMyObject3.meInt = 20;
   lMyObject4.meInt = 20;
   lMyObject5.meInt = 30;
   lCollNonUnique.Add(lMyObject1);
   lCollNonUnique.Add(lMyObject2);
   lCollNonUnique.Add(lMyObject3);
   lCollNonUnique.Add(lMyObject4);
   
   bool flag;
   
   lMyObject1.Compare(lMyObject3,1);
   
   flag = lCollNonUnique.isIn(lMyObject1);
   flag = lCollNonUnique.isIn(lMyObject5);
   
   lCollNonUnique.Sort(1);
   flag = lCollNonUnique.Search(lMyObject1);
   flag = lCollNonUnique.Search(lMyObject5);
   
   printf("compare result = ",lRez);
   
  }
//+------------------------------------------------------------------+
 
class CMyObject : public CObject
{
   public:
   int meInt;
   
 int Compare(const CMyObject *node,const int mode=0) const
  {
  const CMyObject* tmp=dynamic_cast<const CMyObject*>(node);
  return !tmp||this.meInt!=tmp.meInt?0:1;
}   

замени
 
Aleksey Mavrin:

замени

чудес не бывает, да ))

Спасибо!