MQL5 Компилятор не различает класс и указатель на него - страница 10

 
Ilya Malev:

А сколько ещё времени пролетело пока эти операции реально ввели... Одному ветру, наверное, известно. А так да, довольно важные вещи можно поднимать на форуме годами без особого успеха

Ну если не полениться и пролистать чуть вперёд, то можно всё увидеть:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Ilyas, 2015.09.03 14:30


Добавлены операторы *(Dereference/Inderection) и &(Address-of), никаких дополнительных изменений в языке делать не будем/планируем
A *a,*b;

 a== b;   // сравнение "указателей"
*a== b;   // вызов оператора ==(A *)
 a==*b;   // вызов оператора ==(A &)

// для операции != аналогично

// операция & - эквивалент(короткая запись) вызову GetPointer

 
Alexey Navoykov:

Ну если не полениться и пролистать чуть вперёд, то можно всё увидеть:

Если ещё ниже полистать, то можно найти вот это:

Ilyas:
Добавлено в оба языка. Но к сожалению, в ближайший билд это не попадёт.

В общем понятно, что около трех лет назад, скорее всего и добавили... Но где новости, где документация, справка, почему в ней только оператор & упоминается, а * нет, если их добавили одновременно? Судя по тому, что & в документации есть, а * нет, можно предположить, что именно от * тогда и отказались по каким-то причинам прямо перед релизом, а окончательно добавили уже потом. Чтобы это выяснить точно, нужно либо найти новостной пост о билде в котором это было добавлено, либо спросить самих админов.

 
Могу любопытным дать билды 1047, 1085, 1210 и 1224 (примерно тех времен) для экспериментов ;)

 
Andrey Khatimlianskii:
Могу любопытным дать билды 1047, 1085, 1210 и 1224 (примерно тех времен) для экспериментов ;)

Можете и дать. У меня емейл в профиле написан.

 
Ilya Malev:

Можете и дать. У меня емейл в профиле написан.

Может, кто еще захочет.

 
Да уж, истинно винрарная тема ))
 
47 у меня не запустился.
85 (MT4 13.02.15) * не работает
1210 (MT5 30.10.15) * не работает
1224 (МТ5 16.12.15) * не работает (то есть через 3 прописью три месяца после того поста из ветки вопросов)

В то же время & в 1224 компилируется на "ура". Что и доказывает мою гипотезу о том, что тогда добавили только &, но не *

 

Т.е. изначально, в MQL добавили указатели без возможности их разыменования в коде. Интересный подход.

Осталось допилить указательную арифметику или это уже как-то возможно

class A
{
public:

    int iValue;
};
//......................
A m_A[5];

void OnStart()
{
A* pA;

    for(int c =0; c < 5; c++)
    {
        pA = &m_A[c]; 
        
        (*pA).iValue =c;
        printf("A[%i].iValue: %i", c, m_A[c].iValue);
        // pA++
    }
}
 
SemenTalonov:
(*pA).iValue =c;

Вот это: (* ) здесь не нужно

* нужно в мкл только тогда когда непосредственно к * указателю применяются операции =, ==, !=, !, && или ||
 
Ilya Malev:
В то же время & в 1224 компилируется на "ура". Что и доказывает мою гипотезу о том, что тогда добавили только &, но не *

И ещё, кстати, вполне может получится так, что раз на всех официальных каналах (форум, справка, документация) об операторе * гробовая тишина, возможно, админы раздумывают как раз о том, чтобы убрать его снова, и сделать вид, что его и не было))) Так что сильно рассчитывать на его использование вообще опасно пока имхо.