45

私は本を​​通して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;
};

なぜそれが起こるのですか?

4

5 に答える 5

58

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()

于 2012-11-03T11:04:17.920 に答える
9

coutstd名前空間にある場合はstd::cout、コードで使用する必要があります。また、ヘッダーファイルを追加しないusing namespace std;でください。コードをstd名前空間と混在させることはできません。特に、ヘッダーファイルに追加しないでください。

于 2012-11-03T11:04:31.677 に答える