MQL5のコンパイルエラーが消えない時に見る順番|大量のエラーは1つが原因のことが多い

MQL5のコンパイルエラーが消えない時は、上から順に1つずつ直すのではなく、一番上のエラーだけを直して再コンパイルするのが最短です。1つのミスが連鎖して、無関係に見える大量のエラーを引き起こしていることがよくあります。

まず確認すること:エラーと警告を区別する

MetaEditor下部の「エラー」タブには、エラー(赤)警告(黄色)が混在して表示されます。コンパイルが止まる原因は基本的にエラーだけです。警告はコード自体は動くが注意が必要な箇所を示しているだけなので、最初は無視して構いません。

行数の若いエラーから順に、まず1件だけ直してください。

直す順番:一番上から1つずつ

複数のエラーが並んでいても、2番目以降のエラーは1番目が原因で起きている「巻き添え」であることが多いです。特に次のようなエラーが大量に並んでいる場合は、ほぼ確実にこのパターンです。

  • ')' - unbalanced parentheses が何十行も続く
  • unexpected token が同じような箇所で連発する
  • それまで通っていたコードの、関係ない行でいきなりエラーが出始める

この場合、実際の原因は最初のエラーより前の行にあります。1件目を直して再コンパイルすると、残りの大半が同時に消えることがよくあります。

典型的なエラーと原因

'}' - expected(閉じ括弧が足りない)

関数や if 文の中括弧 { } の対応が崩れています。エディタの括弧の直後にカーソルを置くと、対応する括弧がハイライトされます。これで対応が取れているか確認してください。コメントアウトで一時的に括弧を削った時に、片方だけ残ってしまうのが典型的な原因です。

')' - unbalanced parentheses(丸括弧の対応が取れていない)

関数呼び出しや条件式の ( ) の数が合っていません。特に、複数行にまたがる長い条件式で発生しやすいです。1行ずつ折りたたんで、開いた括弧と閉じた括弧の数を数えてください。

'xxx' - undeclared identifier(未宣言の識別子)

変数名のスペルミス、または宣言する前に使っている場合に出ます。大文字・小文字の違いも別の識別子として扱われるため注意してください。グローバル変数のつもりが、関数内のローカル変数として宣言されていて、別の関数から見えていないケースもあります。

';' - semicolon expected(セミコロンがない)

該当行ではなく、その1行前にセミコロンが抜けていることがほとんどです。エラー行番号だけを見て該当行を探しても見つからない場合は、1行前を確認してください。

possible loss of data due to type conversion(型変換の警告)

これは警告であり、コンパイル自体は通ります。doubleint に代入する時などに出ます。意図した変換であれば無視して構いませんが、価格やロット数の計算でこれが出ている場合は、桁落ちしていないか一度確認しておくと安全です。

それでも直らない場合

  • インクルードファイルの中を確認する#include で読み込んでいる別ファイルの中にエラーがあると、呼び出し元の行にエラーとして表示されることがあります
  • 全角文字が紛れていないか確認する:コメント以外の場所に全角スペースや全角の括弧・カンマが紛れ込むと、位置が分かりにくいエラーになります
  • 一度全部コメントアウトして、少しずつ戻す:どうしても原因が特定できない場合、疑わしい範囲をまるごとコメントアウトしてコンパイルが通るか確認し、範囲を狭めていくと早く見つかります

まとめ

  1. エラー(赤)と警告(黄色)を区別し、エラーだけを見る
  2. 一番上のエラーから1つずつ直し、都度再コンパイルする
  3. 大量のエラーが並ぶ時は、最初の1件が原因の巻き添えを疑う
  4. 行番号のエラーが該当行に見当たらない場合は、1行前を確認する

コンパイルが通った後に「追加したのに動かない」場合は、インジケーターの初期値が反映されない理由カスタムインジケーターの追加手順もあわせてご覧ください。