「undeclared identifier」の原因は、まさかの改行コード

アイキャッチ

知人からもらったインジケーターを組み込んだEAを作ろうとした時のこと。

コーディングを無事終え、コンパイルしてみたところ、以下のエラーが発生しました。

undeclared identifier

直訳すると、宣言されていない識別子、でしょうか。

「ん?変数の宣言を忘れてたかな?」と思ってコードを見ても、異常なし。見落としがあるのかと思って、殆どのコードをコメントアウトして、からっぽに近いコードにしても変化なし。

ハマりました。

意味不明です。殆ど空のファイルで、おかしなところなんてあり得ません。試しに過去作成したMQ4ファイルをコンパイルしてみたら、ちゃんとコンパイルできました。

やっぱり、今のコードに問題があるようです。八方ふさがりで「う~ん」と悩むこと30分程。

ふと、改行コードが目に入りました。

「あれ?LFになってる…。え、もしかして!?」

改行コードをLF⇒CR+LFに変更してから再コンパイルしたら、無事コンパイル通りました!

知人が送ってくれたファイルの改行コードがLFだったのが原因でした。

デフォルトの改行コードは、OSによって異なります。

改行コードOS
LFUnix系
CR+LFWindows
CRMac

上記表から、おそらくインジケーターはUnix系OSで作られたのでしょう。Windowsを使ってる人は、普通、改行コードはCR+LFになりますから。

と言うか、多くの人は改行コードなんて意識すらしてないと思います。

同じ問題で苦しんでいる方の参考になれば幸いです。

教訓
MQ4ファイルの改行コードがLFの場合、コンパイルエラーになってしまう。その場合、CR+LFに変換すること。他人からもらったMQ4ファイルは要注意!

スポンサードリンク

ブログランキングに参加中!

ポチっとクリック頂けると励みになります♪
(クリックしてもランキング一覧が表示されるだけですが、それでOKです)

にほんブログ村 為替ブログ FX システムトレード派へ

2件のコメント

  • 浜下

    初めまして。
    自分の使っているOSはwin 10なのですが同じエラーが出てきてコンパイルすることができません。
    改行コードに関しては今まで触った覚えはありません。
    何か他の原因として考えられるのは何でしょうか?

    • りゅーき

      このエラーメッセージは本来、変数が定義されていないという意味ですので、変数の定義忘れがないか確認してはいかがでしょうか?
      MQ4ファイル内のエラーとなっている行番号と列番号もエラーメッセージに記載されていますので、そこにある変数を確認するのが近道です。
      「#property strict」を使っている場合は、変数のスコープにもご注意ください。

コメントを残す



sixteen − eight =