#include<iostream> 存在,但出现错误:标识符“cout”未定义。为什么?

新手上路,请多包涵

我通过书本学习 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;
};

为什么会发生?

原文由 Andrey Bushman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您需要指定 std:: 命名空间:

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

或者,您可以使用 using 指令:

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

cout << .... << endl;

我应该补充一点,您应该避免在标头中使用这些 using 指令,因为包含这些的代码也会将符号带入全局命名空间。将 using 指令限制在小范围内,例如

#include <iostream>

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

这里, using 指令仅适用于 foo() 的范围。

原文由 juanchopanza 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在 #include <iostream> 之后的开头添加它:

 using namespace std;

原文由 arash 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题