У меня есть следующий пример кода MQL5 (для демонстрации проблемы):
// PositionSelectByTicket is missing in older MQL5 builds.
#ifndef PositionSelectByTicket
#define PositionSelectByTicket(ticket) OrderSelect(ticket)
#endif
void CheckOrder(const MqlTradeRequest &Request) {
if (Request.action == TRADE_ACTION_SLTP) {
ulong pos = PositionSelectByTicket(Request.position); // error 130: 'position' - struct member undefined
}
}
void OnStart() { }
И он отлично компилируется в последней сборке Metaeditor 5 (сборка 1495), однако в сборке 1162 (с использованием более старых компилятор mql) Я получил следующие ошибки:
$ wine mql /s /mql5 MQL_Test.mq5
MQL4/MQL5 Compiler build 1162 (02 Jul 2015)
MQL_Test.mq5 : information: Checking 'MQL_Test.mq5'
MQL_Test.mq5(9,17) : error 130: 'position' - struct member undefined
MQL_Test.mq5(9,17) : warning 60: possible use of uninitialized variable ''
: information: Result 1 error(s), 1 warning(s)
Time: 11 ms
Я хотел бы улучшить код, чтобы он был обратно совместим, и я уже добавил определение для PositionSelectByTicket
, как указано выше, чтобы избежать неопределенной функции.
Хотя как исправить ошибки выше, чтобы работало на обоих компиляторах?
На странице документации MqlTradeRequest
struct существует элемент position
struct, поэтому скорее всего его добавили в последних билдах.
Итак, есть ли способ добавить отсутствующий элемент переменной в существующую встроенную структуру, чтобы старый компилятор прошел проверку синтаксиса?