error: 'cout' is not a member of 'std' の原因と直し方
#include <iostream> を書き忘れたまま std::cout や std::endl を使ったときに出るエラーです。名前空間std自体は存在していても、その中身(cout)を知るにはヘッダのインクルードが必要です。
エラーメッセージの読み方
main.cpp:3:10: error: 'cout' is not a member of 'std'
main.cpp- ファイル名
3- 行番号
10- 列番号 — この位置でg++が構文解析に失敗しました
'cout' is not a member of 'std'- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 ^ 2 int main() { 3 std::cout << "hello" << std::endl; 4 return 0; 5 }
main.cpp:3:10: error: 'cout' is not a member of 'std'
std::coutを使うにはiostreamヘッダのインクロードが必要です。std名前空間自体は存在しても、coutの宣言はiostreamの中にあるため、インクルードを忘れるとコンパイラは見つけられません。
直し方: (空) を #include <iostream> にします。
広告
広告スロット(未設定)
パターン2
1 ^ 2 int main() { 3 int x = 5; 4 std::cout << x << std::endl; 5 return 0; 6 }
main.cpp:4:10: error: 'cout' is not a member of 'std'
変数を出力する場合でも、iostreamをインクルードしていなければstd::coutは使えません。
直し方: (空) を #include <iostream> にします。
パターン3
1 ^ 2 int main() { 3 std::cout << 42 << std::endl; 4 return 0; 5 }
main.cpp:3:10: error: 'cout' is not a member of 'std'
数値リテラルを出力するだけの単純なコードでも、iostreamのインクルードが無ければ同じエラーになります。
直し方: (空) を #include <iostream> にします。
よくある誤解
「std::と書けばいつでも使える」というのは誤解です。std名前空間の中身はヘッダファイルごとに分かれて宣言されているため、対応するヘッダをインクルードしていなければコンパイラはcoutの存在を知りません。
まとめ
error: 'cout' is not a member of 'std'は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。