知人からもらったインジケーターを組み込んだEAを作ろうとした時のこと。
コーディングを無事終え、コンパイルしてみたところ、以下のエラーが発生しました。
直訳すると「宣言されていない識別子」です。
「ん?変数の宣言を忘れてたかな?」と思ってコードを見ても、異常なし。見落としがあるのかと思って、殆どのコードをコメントアウトして、からっぽに近いコードにしても変化なし。
ハマりました。
意味不明です。殆ど空のファイルで、おかしなところなんてあり得ません。試しに過去作成したMQ4ファイルをコンパイルしてみたら、ちゃんとコンパイルできました。
やっぱり、今のコードに問題があるようです。八方ふさがりで「う~ん」と悩むこと30分程。
ふと、改行コードが目に入りました。
「あれ?LFになってる…。え、もしかして!?」
改行コードをLF⇒CR+LFに変更してから再コンパイルしたら、無事コンパイル通りました!
知人が送ってくれたファイルの改行コードがLFだったのが原因でした。
デフォルトの改行コードは、OSによって異なります。
改行コード | OS |
---|---|
LF | Unix系 |
CR+LF | Windows |
CR | Mac |
上記表から、おそらくインジケーターはUnix系OSで作られたのでしょう。Windowsを使ってる人は、普通、改行コードはCR+LFになりますから。
と言うか、多くの人は改行コードなんて意識すらしてないと思います。
同じ問題で苦しんでいる方の参考になれば幸いです。
MQ4ファイルの改行コードがLFの場合、コンパイルエラーになってしまいます。その場合、CR+LFに変換しましょう。他人からもらったMQ4ファイルは要注意です!