error: '::main' must return 'int' の原因と直し方
main関数の戻り値の型をvoidにしてしまったときに出るエラーです。C++の標準では、main関数は必ずint型を返すと決められています。
エラーメッセージの読み方
main.cpp:2:1: error: '::main' must return 'int'
main.cpp- ファイル名
2- 行番号
1- 列番号 — この位置でg++が構文解析に失敗しました
'::main' must return 'int'- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 #include <iostream> 2 void main() { ^ 3 std::cout << "start" << std::endl; 4 return 0; 5 }
main.cpp:2:1: error: '::main' must return 'int'
C++の標準ではmain関数は必ずint型を返すと決まっています。voidにするとコンパイルエラーになります。
直し方: void を int にします。
広告
広告スロット(未設定)
パターン2
1 #include <iostream> 2 void main() { ^ 3 int x = 1 + 1; 4 std::cout << x << std::endl; 5 return 0; 6 }
main.cpp:2:1: error: '::main' must return 'int'
C言語の一部の環境ではvoid main()が動くことがありますが、標準準拠を志向するg++では認められません。
直し方: void を int にします。
パターン3
1 #include <iostream> 2 void main() { ^ 3 std::cout << "end" << std::endl; 4 return 0; 5 }
main.cpp:2:1: error: '::main' must return 'int'
return 0;を書いていても、宣言部分のvoidが残っているとエラーになります。戻り値の型そのものをintに直す必要があります。
直し方: void を int にします。
よくある誤解
C言語の入門書や一部の環境では void main() が動いてしまうことがありますが、これは処理系の拡張であって標準ではありません。標準準拠を志向するg++では明確なコンパイルエラーになります。
まとめ
error: '::main' must return 'int'は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。