Почему перестал работать код?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Artem Ipatov
272
Artem Ipatov  
Код компилился в старых билдах MT5, теперь подобная конструкция не работает. Почему?

Компилятор выдает ошибку на выражении "MyList.Add(Instance);" - "'Instance' - parameter conversion not allowed".

//+------------------------------------------------------------------+
#include <Arrays\List.mqh>

CList *MyList=new CList;

class MyClass 
   {
    public:
    MyClass(void);
   };
   
MyClass::MyClass(void)
{
return;
}

void OnStart()
  {
   MyClass Instance();
   MyList.Add(Instance);
  }
//+------------------------------------------------------------------+


Dmitry Fedoseev
56686
Dmitry Fedoseev  

Не может быть, что бы такое раньше работало.

В MyList.Add() нужно передавать указатель на CObject. Значит MyClass должен быть дочерним от CObject, и его объект должен создаваться через new использовать GetPointer(Instance). 
Artem Ipatov
272
Artem Ipatov  
Спасибо! Вот так работает (поправил с учетом последующих комментариев):
//+------------------------------------------------------------------+
#include <Arrays\List.mqh>

CList *MyList=new CList;

class MyClass : public CObject
   {
    public:
    MyClass(void);
   };
MyClass::MyClass(void)
{
return;
}

void OnStart()
  {
   MyClass *Instance=new MyClass;
   MyList.Add(Instance);
  }
//+------------------------------------------------------------------+
Georgiy Merts
9181
Georgiy Merts  
axmed0207:
Спасибо! Вот так работает:

Мне кажется, в последней строке GetPointer - лишний. И, строго говоря, должна быть ошибка.

Вы создаете по new объект типа MyClass, и указатель на него получаете в переменной Instance.

Это УЖЕ указатель.

А вы функцией GetPointer - получаете "указатель на указатель" - это неверно, даже если компилятор "съел" такую конструкцию.

Просто передавайте в Add непосредственно Instance:

MyList.Add(Instance);

Alexey Volchanskiy
27264
Alexey Volchanskiy  
axmed0207:
Спасибо! Вот так работает:

Так писали, что билд не при чем ))
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий