условное создание объектов класса - страница 3

 
Artyom Trishkin:

не помогает

CTimeFrame::Compare не выполняется.

 
Alexandr Atagyan:

не помогает

CTimeFrame::Compare не выполняется.

Ну чудес-то не бывает...

Если объект унаследован от CObject, и у объекта реализован виртуальный метод Compare(), то он должен выполняться.

Другой вопрос - как к нему обращаетесь...

 
Artyom Trishkin:

Ну чудес-то не бывает...

Если объект унаследован от CObject, и у объекта реализован виртуальный метод Compare(), то он должен выполняться.

Другой вопрос - как к нему обращаетесь...

Сам в чудеса не верю...

вот полный код советника

#include <Classes\TF\timeframe.mqh>
CTimeFrame  *tf;
CList *TF=new CList;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   tf=new CTimeFrame(15);
   TF.Add(tf);
   tf=new CTimeFrame(30);
   TF.Add(tf);
   tf=new CTimeFrame(60);
   TF.Add(tf);
   tf=new CTimeFrame(240);
   TF.Add(tf);
   
   Print("sort flag ",TF.IsSorted());
   Print("total ",TF.Total());
   TF.Sort(0);
   tf=TF.GetFirstNode();
   Print("sort(0) first ",tf.m_name);
   tf=TF.GetLastNode();
   Print("sort(0) last ",tf.m_name);
   Print("sort flag ",TF.IsSorted());
   
   TF.Clear();
   Print("total ",TF.Total());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(reason!=3)
      delete TF;
  }

и лог журнала:

2021.03.26 16:36:52.492 TF EURUSD,H1: initialized
2021.03.26 16:36:52.492 TF EURUSD,H1: total 0
2021.03.26 16:36:52.492 TF EURUSD,H1: sort flag true
2021.03.26 16:36:52.492 TF EURUSD,H1: sort(0) last M30
2021.03.26 16:36:52.492 TF EURUSD,H1: sort(0) first H1
2021.03.26 16:36:52.492 TF EURUSD,H1: total 4
2021.03.26 16:36:52.491 TF EURUSD,H1: sort flag false
 

для проверки в CTimeFrame::Compare оставил одну строку:

Print("RUN");

но в журнале "RUN" не видно. И отладчик показывает переход от CList сразу к CObject мимо CTimeFrame

 
   virtual int       Compare(const CObject*,const int) const;

и

   virtual int       Compare(const CObject*,const int);

Это, как бы, две абсолютно разные сигнатуры.

 
Vladimir Simakov:

и

Это, как бы, две абсолютно разные сигнатуры.

Спасибо!