競技プログラミング用 知識集積所
エラー
最終更新:
sport_programming
-
view
ここでは具体的なコードではなくエラーの種類の解説をする。
コンパイルエラー CE
コンパイルに失敗した場合のエラー。
つまり、C++から機械語に翻訳するのに失敗した場合のエラー。
多くの場合、何か必要なものの書き忘れか、余計なことを書いてあるせいで発生する。
つまり、C++から機械語に翻訳するのに失敗した場合のエラー。
多くの場合、何か必要なものの書き忘れか、余計なことを書いてあるせいで発生する。
AtCoderの場合は、提出でCEを出してもペナルティにならない。
エラーメッセージの見方
標準エラー出力の最初に
Main.cpp: In function ‘int main()’: Main.cpp:18:3: error:
と書いてあった場合、main()関数内、全体で18行目の3文字目にエラーがある。
多くの場合はここに何か書き忘れているか、余計なことが書いてある。
その行の先頭にエラーがあると表示されている場合は、本当にエラーしているのは1つ前の行の末尾であることもある。
多くの場合はここに何か書き忘れているか、余計なことが書いてある。
その行の先頭にエラーがあると表示されている場合は、本当にエラーしているのは1つ前の行の末尾であることもある。
たくさんエラーが出た場合は、まずは最初のエラーを解決する。
というのも、2つ目以降のエラーは1つ目のエラーの影響で発生しているだけということも多く、その場合はもちろん2つ目以降のエラーの原因を探すのは無駄な努力であるため。
というのも、2つ目以降のエラーは1つ目のエラーの影響で発生しているだけということも多く、その場合はもちろん2つ目以降のエラーの原因を探すのは無駄な努力であるため。
また、1つ目のエラー場所がMain.cppでない場合、Main.cppでの場所が初めて出てくる場所を探す。
ライブラリの使い方が正しくなかったせいでライブラリ内でエラーが発生した場合、
ライブラリの使い方が正しくなかったせいでライブラリ内でエラーが発生した場合、
エラーしたライブラリとその場所 ↑を呼び出したライブラリとその場所 ↑を呼び出したライブラリとその場所 ↑を呼び出したライブラリとその場所 ↑を呼び出したMain.cppの場所
のような表示になるため。
エラーとワーニング
標準エラー出力のメッセージが
Main.cpp:18:3: error:
ではなく
Main.cpp:18:3: warning:
であることがある。
warningは「このまま実行しようと思えばできるけど、なんか変じゃない? 大丈夫?」という類のもの。
内容を確認して、大丈夫そうなら無視してもよい。
とはいえ、毎回表示されるとエラーメッセージ確認時に邪魔ではある……。
warningは「このまま実行しようと思えばできるけど、なんか変じゃない? 大丈夫?」という類のもの。
内容を確認して、大丈夫そうなら無視してもよい。
とはいえ、毎回表示されるとエラーメッセージ確認時に邪魔ではある……。
よくあるコンパイルエラーメッセージ
全角スペースを使った場合
Main.cpp:18:3: error: extended character is not valid in an identifier 18 | | ^
extended character(拡張文字)というのが全角文字を意味する。
^の位置に全角スペースが入っている。
^の位置に全角スペースが入っている。
未宣言の変数を使っている場合
Main.cpp:18:3: error: ‘a’ was not declared in this scope 18 | a = 0; | ^
not declared(宣言されていない)と書かれている場合、変数の宣言がされていない。
^で示された部分に未宣言の変数があるし、エラーメッセージにも書かれている。
^で示された部分に未宣言の変数があるし、エラーメッセージにも書かれている。
セミコロンを忘れた場合
Main.cpp:19:3: error: expected ‘,’ or ‘;’ before ‘int’ 19 | int b = 0; | ^~~
expected(期待される)と書かれている場合、何か必要なものを書き忘れている。
この場合、18行目の末のセミコロンを忘れたために、19行目の先頭でエラーしている。
このタイプのエラーでは、^の位置ではなくその直前がエラー場所なので注意。
この場合、18行目の末のセミコロンを忘れたために、19行目の先頭でエラーしている。
このタイプのエラーでは、^の位置ではなくその直前がエラー場所なので注意。
括弧の不整合がある場合
Main.cpp:26:12: error: expected ‘}’ at end of input 26 | return 0; |
上と同じく、expected(期待される)と書かれているので、必要なものを書き忘れている。