Code Fix

初級

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にするとコンパイルエラーになります。

直し方: voidint にします。

この問題を解いてみる →

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

パターン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++では認められません。

直し方: voidint にします。

この問題を解いてみる →

パターン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に直す必要があります。

直し方: voidint にします。

この問題を解いてみる →

よくある誤解

C言語の入門書や一部の環境では void main() が動いてしまうことがありますが、これは処理系の拡張であって標準ではありません。標準準拠を志向するg++では明確なコンパイルエラーになります。

まとめ

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

演習をはじめる

関連するエラー

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