Новая версия платформы MetaTrader 5 build 5260: улучшения в Algo Forge, расширение OpenBLAS и новые правила наследования в MQL5 - страница 2

 
Stanislav Korotky #:

Полагаю, что operator[] должен возвращать какое-либо значение, т.е. не быть void.

Точно не в этом деле.

 

После обновления возникла ошибка компиляции библиотеки Tools\DateTime.mqh


Напишите плиз прямо тут в ветке как ее исправить - сейчас это тормозит работу, нет времени ждать обновления с исправлениями.
 
Sergei Lebedev #:

После обновления возникла ошибка компиляции библиотеки Tools\DateTime.mqh


Напишите плиз прямо тут в ветке как ее исправить - сейчас это тормозит работу, нет времени ждать обновления с исправлениями.

Проверьте код в строке 26 файла DateTime.mqh

   void              DateTime(const MqlDateTime& value)  { (MqlDateTime&)*this=value;         }

+

попробуйте добавьте под ней строку:

void              operator=(const MqlDateTime& value) { (MqlDateTime&)*this=value;         }
 
fxsaber #:
b5260, ошибка компиляции. Строка для поискаOshibka 146.

Спасибо за сообщение.
Исправление внёс, будет доступно в следующей бете.

 
fxsaber #:

Прошу объяснить эту запись. Звездочка - это ссылка? Не понимаю.

Попробую объясниться

  1. "звёздочка" перед this - это оператор разыменования указателя в ссылку. 
    В MQL, операция разыменования this в ссылку бесплатная (пустая) операция, т.к. this в MQL не просто указатель (как в C++), а MQL указатель гарантированно разыменованный в ссылку (может использоваться как указатель или ссылка без необходимости разыменования, явного или неявного)
    Если бы это был реальный указатель, например 'CDateTime *', то разыменование указателя в ссылку было бы реальной операцией, которая может привести к критической ошибке "невалидный указатель", т.к нельзя разыменовать невалидный указатель с ссылку.

  2. Приведение ссылки 'CDateTime &' в 'MqlDateTime &', которое возможно благодаря публичному наследованию CDateTime от MqlDateTime.
 

Ilyas #:

this в MQL не просто указатель (как в C++), а MQL указатель гарантированно разыменованный в ссылку (может использоваться как указатель или ссылка без необходимости разыменования, явного или неявного)

T* Method() { return(&this); }

Чтобы из this сделать указатель, требовалось всегда взять GetPointer (короткая запись выше). Т.е. this - это уже ссылка на объект. А у структур и указателей даже нет, а this - есть.

 
Ilyas #:

Попробую объясниться

  1. "звёздочка" перед this - это оператор разыменования указателя в ссылку. 
    В MQL, операция разыменования this в ссылку бесплатная (пустая) операция, т.к. this в MQL не просто указатель (как в C++), а MQL указатель гарантированно разыменованный в ссылку (может использоваться как указатель или ссылка без необходимости разыменования, явного или неявного)
    Если бы это был реальный указатель, например 'CDateTime *', то разыменование указателя в ссылку было бы реальной операцией, которая может привести к критической ошибке "невалидный указатель", т.к нельзя разыменовать невалидный указатель с ссылку.

  2. Приведение ссылки 'CDateTime &' в 'MqlDateTime &', которое возможно благодаря публичному наследованию CDateTime от MqlDateTime.
Как-то всё сложно: "мы преобразуем this в ссылку, но не беспокойтесь, т.к. this и есть ссылка".
 
fxsaber #:

Чтобы из this сделать указатель, требовалось всегда взять GetPointer (короткая запись выше). Т.е. this - это уже ссылка на объект. А у структур и указателей даже нет, а this - есть.

Спасибо за уточнение, верно, в текущей релизной версии MQL, this является ссылкой и при передаче в качестве указателя нужно явно получить от него ссылку.

 
Ilyas #:

... от него ссылку.

*указатель