初級のC++エラー 42問
14種類のエラーを、それぞれ複数パターンずつ収録しています。
- error: expected ',' or ';' before ... の原因と直し方文末のセミコロンを書き忘れたときに出るエラーです。エラーが指す行ではなく、その1つ前の行にセミコロンが無いことがほとんどです。
- error: expected '}' at end of input の原因と直し方波括弧{}の対応が崩れ、閉じ忘れがあるときに出るエラーです。ファイルの終わりまで読んでもブロックが閉じられないため、末尾でエラーになります。
- error: 'x' was not declared in this scope の原因と直し方宣言していない変数を使ったときに出るエラーです。多くの場合はタイプミスで、g++は似た名前の宣言済み変数があれば「did you mean 'total'?」のように候補を提案してくれます。
- error: 'cout' is not a member of 'std' の原因と直し方#include <iostream> を書き忘れたまま std::cout や std::endl を使ったときに出るエラーです。名前空間std自体は存在していても、その中身(cout)を知るにはヘッダのインクルードが必要です。
- error: 'cout' was not declared in this scope; did you mean 'std::cout'? の原因と直し方#include <iostream> はしているのに、std::を付けずにcoutやendlをそのまま使ったときに出るエラーです。C++では標準ライブラリの名前はstd名前空間の中にあり、省略するにはusing宣言が必要です。
- C++でerror: missing terminating " character が出る原因と直し方文字列リテラルの閉じクォート(")を書き忘れたときに出るエラーです。閉じ忘れた行がそのままエラー行になり、後続の行でも連鎖的にエラーが出ることがあります。
- error: invalid conversion from 'const char*' to 'char' の原因と直し方ダブルクォートで囲んだ1文字("A"など)をchar型の変数に代入しようとしたときに出るエラーです。ダブルクォートは何文字であっても文字列(const char*)を作り、char型とは互換性がありません。
- if文で = と == を取り違えたときの挙動比較のつもりで書いた if (ok = 1) が実は代入文になっているバグです。C++はこれを構文エラーとして扱わず、代入結果の値を条件として評価してしまいます。
- int同士の割り算で小数点以下が消えるバグint型同士の割り算は小数点以下を切り捨てたint型の結果になるバグです。その結果をdouble型に代入しても、切り捨てはすでに終わったあとなので元には戻りません。
- 配列の添字を1つずらしてしまうoff-by-oneバグ配列の要素数と添字の範囲を混同し、ループの開始や終了条件を1つずらしてしまうバグです。要素が抜けたり、逆に範囲外を読んでしまったりします。
- int型のゼロ除算で実行時に落ちる原因int型同士の割り算で除数が0になったときに実行時エラーで異常終了するバグです。コンパイルは正常に通り、実行して初めて発覚します。
- error: no match for 'operator>>' の原因と直し方std::cout に >> を使ったり、std::cin に << を使ったりと、ストリーム演算子の向きを取り違えたときに出るエラーです。<<は出力(送り込む)、>>は入力(受け取る)で向きが逆です。
- error: '::main' must return 'int' の原因と直し方main関数の戻り値の型をvoidにしてしまったときに出るエラーです。C++の標準では、main関数は必ずint型を返すと決められています。
- error: ISO C++ forbids comparison between pointer and integer の原因と直し方int型の変数をダブルクォートの文字列リテラル(例: "20")と== で比較しようとしたときに出るエラーです。文字列リテラルはconst char*型であり、int型とは根本的に比較できません。