1. ホーム
  2. c++

[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?

2022-01-24 11:09:05

質問

C++とCOMを本で勉強しています。 IDE MS Visual Studio 2012で、新しい空のC++プロジェクトを作成し、いくつかの既存のファイルを追加しました。私のCPPファイルには #include<iostream> の行がありますが、エディタではこのようなメッセージが表示されます。

エラー: 識別子 "cout" は未定義です。

終了

エラー: 識別子 "endl" が未定義です。

コード

#include<iostream>
#include"interfaces.h" // unknown.h, objbase.h, initguid.h

class CA {//: public IX, IY{
public:
    // Constructor
    CA();
    // Destructor
    ~CA();
    // IUnknown
    virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv);
    virtual ULONG __stdcall AddRef();
    virtual ULONG __stdcall Release();
    // IX
    virtual void __stdcall Fx1();
    virtual void __stdcall Fx2();
    // IY
    virtual void __stdcall Fy1(){ cout << "Fy1" << endl; }  // errors here
    virtual void __stdcall Fy2(){ cout << "Fy2" << endl; }  // errors here also
private:
    long counter;
};

なぜそうなるのか?

解決方法は?

を指定する必要があります。 std:: の名前空間を使用します。

std::cout << .... << std::endl;;

あるいは using ディレクティブを使用します。

using std::cout;
using std::endl;

cout << .... << endl;

付け加えると、以下のものは避けるべきです。 using このディレクティブを含むコードは、そのシンボルがグローバル名前空間に取り込まれるからです。ディレクティブの使用は小さなスコープに限定してください。

#include <iostream>

inline void foo()
{
  using std::cout;
  using std::endl;
  cout << "Hello world" << endl;
}

ここで using ディレクティブのスコープにのみ適用されます。 foo() .