【问题标题】:C++ cout gives undeclared identifierC++ cout 给出未声明的标识符
【发布时间】:2013-05-27 08:37:45
【问题描述】:

所以,我有这个问题。 cout为什么会抛出

error C2065: 'cout' : undeclared identifier

我正在使用 Visual Studio 2012 作为 IDE,并且正在编写一个学校项目。除了示例文件之外,我已经完成了所有工作。所以我想在屏幕上写这样的东西:

#include "iostream"
#include "stdafx.h"
using namespace std;

int main()
{
    cout<<"example";

    return 0;
}

所以问题出在 cout...printf 工作正常,但我想使用 cout。

编辑: 我已将 "" 更改为 但它没有帮助。此外,我仅使用此代码作为示例...这不是整个项目。

【问题讨论】:

  • 试试#include &lt;iostream&gt;
  • 并使用std::cout或使用命名空间。
  • 我相信预编译的header一定是源码的第一行。
  • @chris 是的,假设项目实际使用预编译的头文件。
  • @Angew,好吧,从源代码中的 stdafx.h 来看,我认为确实如此。

标签: c++ cout


【解决方案1】:

stdafx.h 应该是源文件中的第一个包含指令。

按照其他建议,切换文件并将第二个包含转换为 &lt;&gt;

#include "stdafx.h"
#include <iostream>

更多信息请参见this post

【讨论】:

  • 谢谢,我自己才发现的,但你是唯一有实际修复的人 :D :D
  • @user2440586,公平地说,在包含标准标题时使用尖括号要好得多。
【解决方案2】:

首先:

#include <iostream>

而不是#include "iostream"

其次,写using namespace std; 通常被认为是一种不好的做法,尽管大多数课程都是以它开头的。根据您的情况,最好只使用您实际需要的:

using std::cout;

【讨论】:

  • 不需要“第二”。他已经使用了“using namespace std;”
  • 哎呀,我的错...删除了
  • 问题是为什么当 "" 搜索像 时它会失败。
  • @Marc Claesen,它没有帮助......仍然抛出同样的错误。
【解决方案3】:
 #include "iostream"

应该是

 #include <iostream>

引用这篇文章:difference-between-iostream-and-iostream-quotes-in-include

感谢@Jerry Coffin 的回答:

当您使用 时,编译器仅在系统指定的目录中查找头文件(例如,您在包含环境变量中设置的任何目录)。

当你使用 " " 时,编译器首先在本地目录中查找,如果失败,就像你使用 一样重新搜索。从技术上讲,(即根据标准)不一定是“本地”目录,但这就是它在我所知道的每个编译器中的工作方式。

编辑:

但是,根本原因是stdafx.h 是一个预编译的头文件。 Visual C++ 不会编译源文件中#include "stdafx.h" 之前的任何内容,除非未选中编译选项/Yu'stdafx.h'(默认情况下);它假定源代码中直到并包括该行的所有代码都已编译。但是,最好将&lt;&gt;iostream 一起使用,以免混淆代码的读者。

【讨论】:

  • 我看到的问题是您的回答与报价相矛盾。我的钱在 PCH 问题上。
  • @chris 我认为引用的最后一句话but that's how it works in essentially every compiler of which I'm aware 巩固了他的回答。如果包含的报价不正确,请随时纠正我,谢谢!
  • 我相信他引用了这样一个事实:#include "name" 在返回到#include &lt;name&gt; 之前以实现定义的方式搜索,但是每个理智的编译器都会在本地目录中查找。
  • @chris 好的。我同意。我现在明白你的意思了,因为编译器最终会搜索使用的标头&lt;&gt;,所以它与我的回答相矛盾。所以真正的原因可能是因为使用“”时,如果在本地目录中找不到,理智的编译器可能会停止查找。这是真的吗?
  • 不符合要求。如果在使用双引号时找不到,该标准要求它假装您使用尖括号。
【解决方案4】:

如果您将#include &lt;iostream&gt; 与 一起使用而不是“”,那么它应该可以工作。现在,编译器不知道在哪里可以找到 iostream 库。

此外,您可能希望将 cout&lt;&lt;"example"; 更改为 cout&lt;&lt;"example"&lt;&lt;endl; 以换行以使其格式正确。

【讨论】:

  • 如果您只是建议添加一个新行,那么建议添加一个新行:&lt;&lt; '\n';。如果你也建议冲洗,你应该清楚地指出这一点。
【解决方案5】:

在尝试构建动态链接库时遇到此问题。确保您在 .cpp 文件的第一行指定以下 include 而不是 #include stdafx.h

#include "pch.h"

VS2017 或更早版本也应该如此。

【讨论】:

    【解决方案6】:

    此错误也发生在 Visual Studio 2017 IDE 中。将 stdafx.h 移到顶部解决了错误。

    有关 stdafx.h 的更多信息,请参阅What's the use for "stdafx.h" in Visual Studio?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多