AP3 - 付録3.コンパイルエラー集 解説 /

実行時間制限: 0 msec / メモリ制限: 0 KB

EX2「1.02.プログラムの書き方とエラー」に戻る

コンパイルエラー集

コンパイルの際、コードが間違っていると、コンパイルエラーが発生します。 このページでは代表的なコンパイルエラーの説明と、対処法について説明します。

このページに書かれていることはAtCoder上で「C++14 (GCC 5.4.1)」として実行することを想定した内容となっています。他の環境を使っている人はサンプルプログラムを自分の環境で実行してエラーメッセージを確認してください。

このページの使い方

ブラウザの検索機能を使って、エラーメッセージでページ内検索すると該当するエラーの記事を検索しやすいです。

Chromeの場合

  • ツールバー右上にあるChromeメニューをクリックします。
  • 検索(F)をクリックします。
  • 右上に表示された検索フィールドに検索したいキーワードを入力します。

FireFoxの場合

  • メニューボタンをクリックします。
  • このページを検索...をクリックします。
  • 下部に表示された検索フィールドに検索したいキーワードを入力します。

Edgeの場合

  • Ctrl + F キーを押します。
  • 画面上部に表示された検索フィールドに検索したいキーワードを入力します。

検索方法

  • コンパイルエラーをコピーします
  • ブラウザの検索機能を用いて検索します。 見つからない時は、エラーメッセージを短くしてみたりしてみましょう。

セミコロン忘れ

エラーメッセージ例

error: expected ‘,’ or ‘;’ before ‘○○○’
error: expected ';' at end of declaration

原因

行末のセミコロンやコロンの記述を忘れている。

エラーの出るコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  int a = 2;
  int b = 3
  int c = a + b;
  cout << c << endl;
}

6行目 行末のセミコロンを忘れている。

修正方法

セミコロンを追記しましょう。 セミコロンを忘れている場所はエラーメッセージの出ている行の近くであることが多いです。

修正したコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  int a = 2;
  int b = 3;
  int c = a + b;
  cout << c << endl;
}

6行目の行末にセミコロンを追記しました。


存在しない変数の利用

エラーメッセージ例

error: ‘○○○’ was not declared in this scope

原因

変数を宣言せずに利用しようとした。

エラーの出るコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  int a = 2;
  int b = 3;
  cout << c << endl;
}

7行目 c という名前の変数を宣言せずに使ってしまっています。

修正方法

変数を宣言しましょう。

修正したコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  int a = 2;
  int b = 3;
  int c = a + b;
  cout << c << endl;
}

7行目にcという名前の変数を宣言しました。


includeファイル名の間違い

エラーメッセージ例

fatal error: ○○○.h: No such file or directory

原因

includeするファイルの名前を間違えています。

エラーの出るコード

#include <bits/stdoooc++.h>
using namespace std;

int main() {
  cout << "Hello World" << endl;
}

修正方法

includeするファイルの名前を訂正しましょう。

修正したコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  cout << "Hello World" << endl;
}

include忘れ

エラーメッセージ例

error: '○○○’ was not declared in this scope

原因

includeを記述するのを忘れています。

エラーの出るコード

using namespace std;

int main() {
  cout << "Hello World" << endl;
}

#include<bits/stdc++.h> を記述せずに coutendlを使っています。

修正方法

利用したい関数をincludeしましょう。

修正したコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  cout << "Hello World" << endl;
}

1行目に #include <bits/stdc++.h> と追記しました。


関数名と変数名が重複してしまう

エラーメッセージ例

error: '○○○’ cannot be used as a function

原因

変数を関数のように使ってしまっています。 関数名と変数名が衝突してしまっているために起こることがあります。

エラーの出るコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<int> vec;
  vec = { 25, 100, 64 };

  int max = vec.at(0);
  for(int i = 1; i < vec.size(); i++) {
    max = max(vec.at(i), max);
  }
  cout << max << endl;
}

10行目 最大値を返す関数であるmax関数と、最大値を格納する変数であるmax変数があり、 名前が衝突してしまっています。

修正方法

変数名を変え、名前が衝突しないようにしましょう。

修正したコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<int> vec;
  vec = { 25, 100, 64 };

  int num_max = vec.at(0);
  for(int i = 1; i < vec.size(); i++) {
    num_max = max(vec.at(i), num_max);
  }
  cout << num_max << endl;
}

変数名 maxnum_max に変更しました。

for文の構文ミス

エラーメッセージ例

./Main.cpp: In function ‘int main()’:
./Main.cpp:5:29: error: expected ‘)’ before ‘;’ token
   for(int i = 0; i < 10; i++;) {
                             ^
./Main.cpp:5:30: error: expected primary-expression before ‘)’ token
   for(int i = 0; i < 10; i++;) {

for文の構文付近にエラーが出ているのが特徴です。

原因

for文の構文ミス

エラーの出るコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  for(int i = 0; i < 10; i++;) {
    cout << i << endl;
  }
}

5行目のfor文の構文にミスがあります。 最後の増分処理の部分に余計なセミコロンがあります。

修正方法

for文の構文が正しくなるよう訂正しましょう。

修正したコード

#include <bits/stdc++.h>
using namespace std;

int main() {
  for(int i = 0; i < 10; i++) {
    std::cout << i << std::endl;
  }
}

余計なセミコロンを削除しました。