1

次のサンプル 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未定義の関数を避けるために、上記のようにdefine forを追加しました。

両方のコンパイラで動作するように上記のエラーを修正するにはどうすればよいですか?

構造体のドキュメントページにはMqlTradeRequest構造positionアイテムが存在するため、最近のビルドで追加された可能性が最も高いです。

不足している変数項目を既存の組み込み構造体に追加して、古いコンパイラが構文チェックに合格する方法はありますか?

4

1 に答える 1