競技プログラミング用 知識集積所

エラー

最終更新:

sport_programming

- view
管理者のみ編集可
ここでは具体的なコードではなくエラーの種類の解説をする。



コンパイルエラー CE

コンパイルに失敗した場合のエラー。
つまり、C++から機械語に翻訳するのに失敗した場合のエラー。
多くの場合、何か必要なものの書き忘れか、余計なことを書いてあるせいで発生する。

AtCoderの場合は、提出でCEを出してもペナルティにならない。

エラーメッセージの見方

標準エラー出力の最初に
Main.cpp: In function ‘int main()’:
Main.cpp:18:3: error:
と書いてあった場合、main()関数内、全体で18行目の3文字目にエラーがある。
多くの場合はここに何か書き忘れているか、余計なことが書いてある。
その行の先頭にエラーがあると表示されている場合は、本当にエラーしているのは1つ前の行の末尾であることもある。

たくさんエラーが出た場合は、まずは最初のエラーを解決する。
というのも、2つ目以降のエラーは1つ目のエラーの影響で発生しているだけということも多く、その場合はもちろん2つ目以降のエラーの原因を探すのは無駄な努力であるため。

また、1つ目のエラー場所がMain.cppでない場合、Main.cppでの場所が初めて出てくる場所を探す。
ライブラリの使い方が正しくなかったせいでライブラリ内でエラーが発生した場合、
エラーしたライブラリとその場所
↑を呼び出したライブラリとその場所
↑を呼び出したライブラリとその場所
↑を呼び出したライブラリとその場所
↑を呼び出したMain.cppの場所
のような表示になるため。

エラーとワーニング

標準エラー出力のメッセージが
Main.cpp:18:3: error:
ではなく
Main.cpp:18:3: 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行目の先頭でエラーしている。
このタイプのエラーでは、^の位置ではなくその直前がエラー場所なので注意。

括弧の不整合がある場合

Main.cpp:26:12: error: expected ‘}’ at end of input
   26 |   return 0;
      |   
上と同じく、expected(期待される)と書かれているので、必要なものを書き忘れている。

型の不整合がある場合


実行時エラー

よくある実行時エラーメッセージ

vectorの範囲外アクセス

ゼロ除算


論理エラー

よくある論理エラー

ウィキ募集バナー