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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。