Code Fix

初級

error: expected '}' at end of input の原因と直し方

波括弧{}の対応が崩れ、閉じ忘れがあるときに出るエラーです。ファイルの終わりまで読んでもブロックが閉じられないため、末尾でエラーになります。

エラーメッセージの読み方

main.cpp:7:2: error: expected '}' at end of input
main.cpp
ファイル名
7
行番号
2
列番号 — この位置でg++が構文解析に失敗しました
expected '}' at end of input
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  #include <iostream>
 2  int main() {
 3      if (true) {
 4          std::cout << "yes" << std::endl;
 5       
        ^
 6      return 0;
 7  }
main.cpp:7:2: error: expected '}' at end of input

if文の{を閉じ忘れると、それ以降の行がすべてif文の中に取り込まれてしまい、最後の}はmain関数ではなくif文を閉じることになります。結果としてmain関数自体が閉じられないままファイルが終わります。

直し方: (空)} にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  #include <iostream>
 2  int main() {
 3      for (int i = 0; i < 3; i++) {
 4          std::cout << i << std::endl;
 5       
        ^
 6      return 0;
 7  }
main.cpp:7:2: error: expected '}' at end of input

forループの{を閉じ忘れると、後続のコードがすべてループの中身として解釈されます。

直し方: (空)} にします。

この問題を解いてみる →

パターン3

 1  #include <iostream>
 2  int main() {
 3      while (false) {
 4          std::cout << "no" << std::endl;
 5       
        ^
 6      return 0;
 7  }
main.cpp:7:2: error: expected '}' at end of input

g++は「to match this '{'」でどの開き括弧に対応する}が足りないかを教えてくれます。今回はwhileの開き括弧が対応不足です。

直し方: (空)} にします。

この問題を解いてみる →

よくある誤解

エラーは必ずファイルの最後の行を指しますが、実際に直すべき場所は閉じ忘れた{が開かれた場所です。g++は親切に「to match this '{'」と対応する開き括弧の位置も教えてくれるので、そこから探すのが近道です。

まとめ

error: expected '}' at end of inputは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)