error: 'cout' was not declared in this scope; did you mean 'std::cout'? の原因と直し方
#include <iostream> はしているのに、std::を付けずにcoutやendlをそのまま使ったときに出るエラーです。C++では標準ライブラリの名前はstd名前空間の中にあり、省略するにはusing宣言が必要です。
エラーメッセージの読み方
main.cpp:3:5: error: 'cout' was not declared in this scope; did you mean 'std::cout'?
main.cpp- ファイル名
3- 行番号
5- 列番号 — この位置でg++が構文解析に失敗しました
'cout' was not declared in this scope; did you mean 'std::cout'?- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 #include <iostream> 2 int main() { 3 cout << "hello" << std::endl; ^ 4 return 0; 5 }
main.cpp:3:5: error: 'cout' was not declared in this scope; did you mean 'std::cout'?
iostreamはインクルードしていますが、coutはstd名前空間の中にあるため、std::を省略すると見つかりません。
直し方: cout を std::cout にします。
広告
広告スロット(未設定)
パターン2
1 #include <iostream> 2 int main() { 3 int x = 5; 4 cout << x << std::endl; ^ 5 return 0; 6 }
main.cpp:4:5: error: 'cout' was not declared in this scope; did you mean 'std::cout'?
g++は「did you mean 'std::cout'?」と修正候補まで示してくれますが、修正するのは自分自身です。
直し方: cout を std::cout にします。
パターン3
1 #include <iostream> 2 int main() { 3 std::cout << "score: " << 90 << endl ; ^ 4 return 0; 5 }
main.cpp:3:37: error: 'endl' was not declared in this scope; did you mean 'std::endl'?
coutにはstd::を付けていても、endlの方に付け忘れると同じ種類のエラーが個別に発生します。
直し方: << endl を << std::endl にします。
よくある誤解
「includeさえすれば関数名だけで使える」と思われがちですが、includeは宣言を読み込むだけで、名前空間の省略を許可するわけではありません。省略したいなら明示的にusing namespace std;かusing std::cout;が必要です。
まとめ
error: 'cout' was not declared in this scope; did you mean 'std::cout'?は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。