Передача структуры в конструктор в MQL4

Передача каждого отдельного аргумента в конструктор, когда у вас есть 10 или более, утомительна и не очень удобна в обслуживании — также делает чтение аргументов конструктора довольно трудным делом.

Шаблон, который я хочу использовать, обычно используется в Ruby / Node / Python и надеется, что в MQL4 будет что-то похожее

Поэтому я хочу передать объект пары «ключ-значение» в конструктор со всеми аргументами.
К сожалению, я получаю —

struct cannot be defined in param list.

от компилятора.

Я всего лишь n00b на C, и это моя первая попытка программы MetaQuotes4 (EA). Я гуглил и трал документы. Не могу найти ничего кроме документов, говорящих, что прохождение классов, массивов и структур может быть сделано только с использованием передачи по ссылке.

Вопрос в строке 10.

Скриншот

он загружен с ошибками компиляции — потому что это WIP. Остальные ошибки, которые я могу обработать, но структура, не разрешенная в параметрах, приводят меня в замешательство. Любая помощь или совет будут потрясающими.

Может быть, есть альтернативный шаблон?

Заранее спасибо.

0

Решение

Будь осторожен — MQL4 во многих отношениях не похож C++ компилятор

Хотя синтаксические конструкторы могут выглядеть одинаково, реальное использование ограничено или запрещено в .MQL4 компиляция MetaLang.exe компилятор.

Так, struct выглядеть многообещающе, но не будет соответствовать вашему желанию.

Как изображено на вашем принт-экране,

...
string symbol = params.symbol;
...

вы планируете включить также string введенные в вас значения struct,

Хотя это возможно, MQL4 документация однако подразумевает ограничения для таких struct использование и единственная форма struct, что разрешено безопасно использовать при передаче параметров вызова функции просто ПРОСТАЯ СТРУКТУРА, то есть struct без какой-либо строковой составляющей (после многих лет, проведенных в MQL4 домен, вы бы подготовленный для похожих специальности. Некоторые из которых включают в себя string который внутренне не string, но struct и этот кошмар только начался … (и вы можете представить, что это навязывает вашему интерфейсу DLL и т. д.).

Название структуры не может использоваться в качестве идентификатора (имя переменной или функции).

или же

Следует отметить, что в структуре MQL4 элементы следуют друг за другом прямо, без выравнивания.

В C ++ такой порядок делается для компилятора с помощью следующей инструкции:

#pragma pack(1)

Если вы хотите сделать другое выравнивание в структуре, используйте вспомогательные элементы, «заполнители» до нужного размера.

а также

С return оператор ты не может возвращать любые массивы, объекты классов, переменные типа составной структуры.

Так что будьте осторожны и прочитайте документацию по MQL4 от начала до конца, так как некоторые «особенности» скрыты в местах, вряд ли их можно ожидать априори.

1

Другие решения


По вопросам рекламы [email protected]