MT5, mql5, mql5.com предложения по улучшению. - страница 10

 
Artyom Trishkin #:
Это-то понятно. А пример простейший можно?
https://www.mql5.com/ru/docs/basis/preprosessor/conditional_compilation
 
Artyom Trishkin #:
До дыр. 
Я не особо понимаю, какой пример нужен?
Как #ifdef использовать?
 
fxsaber #:

Так и работает.

Мы наверное про разное.


// Main.mqh

#include <Arrays\ArrayLong.mqh>

CArrayLong some_array;

#include "Additional.mqh"


Далее включаемый файл

// Additional.mqh
some_array.Add(12345);

Получаем такую ошибку как далее.

'some_array' - unexpected token, probably type is missing? 

Вот про такое писал. Имел в виду возможность макросом указать для Additional.mqh в какой файл он включается, что-бы IDE спарсила что нужно и установила связи.


 
Igor Zakharev #:

Получаем такую ошибку как далее.

Вы просто компилируете Additional.mqh, поэтому получаете ошибку. Компилируйте Main.mqh или еще выше, где все задано.

#include - это просто вставка текста из файла. При этом повторный инклуд того же файла игнорируется.


У меня часто mqh не компилируется. Не мешает жить.

 
fxsaber #:

Вы просто компилируете Additional.mqh, поэтому получаете ошибку. Компилируйте Main.mqh или еще выше, где все задано.

#include - это просто вставка текста из файла. При этом повторный инклуд того же файла игнорируется.


У меня часто mqh не компилируется. Не мешает жить.

Нет, все верно.

Вынесите за рамки функции строку в подключаемом файле:

some_array.Add(12345);

и у вас тоже будет ошибка

 
Igor Zakharev #:

Вынесите за рамки функции строку в подключаемом файле:

и у вас тоже будет ошибка

Нельзя в глобальном скопе вызывать функции. Единственное исключение - инициализация глобальных переменных.
#define MACROS2(A) const double Init##A
#define MACROS1(A) MACROS2(A)
#define MACROS_GLOBAL_INIT MACROS1(__LINE__)

MACROS_GLOBAL_INIT = some_array.Add(12345);
 
fxsaber #:
Нельзя в глобальном скопе вызывать функции. Единственное исключение - инициализация глобальных переменных.

Спасибо, что напомнили. По сути это произошло случайно и спросонья :)

Сама суть изначального вопроса не меняется, а она в том, что не видны функции и/или поля класса через оператор точка. Этот момент как-то обойти можно?

То что писал в первом посте про перелинковку - как раз для этого может быть полезна.
 
Igor Zakharev #:

Сама суть изначального вопроса не меняется, а она в том, что не видны функции и/или поля класса через оператор точка. Этот момент как-то обойти можно?

Это, действительно, неудобно. Вы можете весь текст писать в самодостаточном mqh, а потом его искусственно разделить на несколько mqh, каждый из которых не обязательно компилируется.

 
fxsaber #:

Это, действительно, неудобно. Вы можете весь текст писать в самодостаточном mqh, а потом его искусственно разделить на несколько mqh, каждый из которых не обязательно компилируется.

Спасибо, понял. Ну собственно об этом весь сыр-бор и был.

Подумал предложить что-то по типу макроса #from вести для включаемых файлов. Например: #from "Main.mqh" . Как идея.

Причина обращения: