所以,我有这个问题。为什么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。
编辑: 我已将“”更改为&lt;&gt;但它没有帮助。此外,我仅使用此代码作为示例...这不是整个项目。
答案 0 :(得分:16)
stdafx.h
应该是源文件中的第一个include指令。
切换文件并将第二个包含转换为<>
,与其他建议一样。
#include "stdafx.h"
#include <iostream>
有关详细信息,请参阅this post。
答案 1 :(得分:11)
首先:
#include <iostream>
而不是#include "iostream"
其次,写using namespace std;
通常被认为是不好的做法,尽管大多数课程都是从那开始的。在你的情况下,最好只使用你真正需要的东西:
using std::cout;
答案 2 :(得分:4)
#include "iostream"
应该是
#include <iostream>
从这篇文章引用:difference-between-iostream-and-iostream-quotes-in-include
由@Jerry Coffin的答案提供:
当你使用&lt; &gt;,编译器只查找系统指定的目录/目录(例如,你在include环境变量中设置的任何内容)。
当您使用“”时,编译器首先查找本地目录,如果失败,则重新搜索就像您使用的那样&lt;取代。从技术上讲,(即根据标准)不一定是“本地”目录,但它本身就是我所知道的每个编译器的工作方式。
修改强>
但是,根本原因是stdafx.h
是预编译的标头。 Visual C ++不会在源文件中的#include "stdafx.h"
之前编译任何内容,除非取消选中编译选项/Yu'stdafx.h'
(默认情况下);它假设源中包含该行的所有代码都已编译。但是,最好将<>
与iostream
一起使用,以免混淆代码的读者。
答案 3 :(得分:1)
如果您将#include <iostream>
与&lt;&gt;一起使用而不是“”然后它应该工作。现在,编译器不知道在哪里可以找到iostream库。
此外,您可能希望将新cout<<"example";
更改为cout<<"example"<<endl;
,以便正确格式化。
答案 4 :(得分:-2)
Visual Studio 2017 IDE中也发生此错误。将stdafx.h移到顶部解决了错误。
有关stdafx.h的更多信息,请参阅What's the use for "stdafx.h" in Visual Studio?