错误C2065:“ cout”:未声明的标识符


72

我正在编程任务的“驱动程序”部分工作,并且不断收到这个荒谬的错误:

错误C2065:“ cout”:未声明的标识符

我什至尝试使用std :: cout,但又收到另一个错误消息:IntelliSense:当我声明使用命名空间std时,命名空间“ std”没有成员“ cout” ,包括iostream +我什至尝试使用ostream

我知道这是一个标准的菜鸟问题,但这困扰了我,我是新手(意思是:我之前已经编程过……)

#include <iostream>
using namespace std;

int main () {
    cout << "hey" << endl;
 return 0;
}

我正在使用Visual Studio 2010并运行Windows7。所有.h文件均具有“ using namespace std”,并包括iostream和ostream。


2
删除除iostream之外的所有头文件,然后重试。
Timo Geusch 09年

2
你的<<结尾不应该是endl吗?
RC。

7
“注意:所有.h文件都包含名称空间std-并包括io和o流...” <-如果您的意思是所有.h文件都具有“ using namespace std;” 在其中,您可能需要重新考虑...
Cogwheel

3
int main不是int Main。而且不需要功能主体后的分号。
Cat Plus Plus 2009年

13
我严重怀疑Visual Studio是否存在有关cout的错误。
GManNickG

Answers:


65

在Visual Studio中,您必须#include "stdafx.h"并且首先是cpp文件的内容。例如:

这些将不会工作。

#include <iostream>
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}




#include <iostream>
#include "stdafx.h"
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}

这样就可以了。

#include "stdafx.h"
#include <iostream>
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}

关于stdafx.h标头的功能,这是一个很好的答案。


3
这应该是正确的答案,因为它指定了代码为何起作用。非常感谢。
Eliud

1
是的,这应该是公认的答案。其他大多数也可以正常工作,但这很清楚地说明了这一点。@Wallter
Konstantin A.

1
我只是投了赞成票。答案很明确。
萨米尔

除了没有人提到什么stdafx.h
uitty400 '18


11

我在Visual Studio C ++ 2010上遇到了同样的问题。很容易解决。在main()函数上方,只需用下面的内容替换标准的include行,但在includes前面加上井号即可。

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

10

include "stdafx.h"是确定

但是cout除非包含以下内容,否则您将无法使用using namespace std

如果您尚未包括命名空间std,则必须编写std::cout而不是简单cout


这是正确的答案。您需要在cout所在的地方使用`using namespace std'。在现代C ++中,所有函数都在自己的名称空间中。
Hammad Khan

4

我看过如果你用

#include <iostream.h>

那么您会遇到问题。

如果您使用

#include <iostream>  

(注意-不带.h)

那么您将不会遇到您提到的问题。


我已经看到,如果使用#include <iostream.h>,则会遇到问题。如果使用#include <iostream>(注意-没有.h),则不会遇到您提到的问题。
GB

但是为什么使用include而不包含“ .h”如此重要呢?
JavaRunner 2013年

1
@JavaRunner:因为文件名为iostream。它没有命名iostream.hiostream.h不存在。就那么简单。
Lightness Races in Orbit

4

如果您启动了一个需要#include "stdafx.h"生产线的项目,请放在第一位。


3

以下代码可以使用gcc编译并正常运行。尝试复制/粘贴此内容,看看是否可行。

#include <iostream>
using namespace std;

int bob (int a) { cout << "hey" << endl; return 0; };

int main () {
    int a = 1;
    bob(a);
    return 0;
}

是的,同样的事情-错误1错误C2065:“ cout”:未声明的标识符&& IntelliSense:标识符“ cout”未定义
Wallter

std :: cout是否有效?我对Visual Studio不太了解,您确定已将项目正确设置为C ++项目吗?如果打开文件iostream,它是否包含cout声明?
格伦(Glen)

鉴于VS2010仍为beta版,可能是一个错误(您使用的是哪个beta版本?)。但是我很难相信如此基本的东西不能正常工作。
格伦(Glen)

在ubuntu C ++项目上;添加此“使用名称空间标准”;在“ #include <iostream>”之后做了工作-谢谢
serup

3

如果您包括的唯一文件是iostream,但仍然说未定义,则iostream可能不包含其应有的内容。您的项目中是否可能有一个空文件,巧合地名为“ iostream”?


3

当我在C ++代码中使用.c文件扩展名时,我已经看到类似的事情发生。除此之外,我还必须就安装错误的车与所有人达成共识。如果您尝试使用早期版本的VS编译项目,是否可以正常工作?尝试VC ++ Express2008。它在msdn上免费。


是的,那是VS2010-我安装了Eclipse Galileo,程序运行正常!!!
沃特

3

在我的情况下,这样一个愚蠢的解决方案:

// Example a
#include <iostream>    
#include "stdafx.h"

当我将其更改为类似于下面的示例b时,按照示例a进行了上述说明。

// Example b
#include "stdafx.h"
#include <iostream>  

我的代码编译得像个魅力。试试看,保证能正常工作。


2

我有VS2010,Beta 1和Beta 2(一台在我的工作机上,一台在家里),并且我已经std大量使用了,没有问题。尝试输入:

std::

并查看Intellisense是否给您任何东西。如果它给您平常的东西(abortabsacos等),cout,那么,是一个相当益智游戏。在这种情况下,绝对要查看您的C ++标头。

除此之外,我还要补充一点,以确保您正在运行一个常规的空项目(不是Intellisense受损的CLR),并且您实际上已经尝试过至少一次构建该项目。正如我在评论中提到的那样,一旦添加了include;。可能是因为某些东西卡在了解析器中,但并没有立即“发现” cout。(在这种情况下,可以尝试重新启动VS吗?)


不,在std ::中没有cout,endl,cerr :(完成中)
雏菊2012年

2

拿代码

#include <iostream>
using namespace std;

从您的.cpp文件中创建一个头文件,并将其放在.h文件中。然后加

#include "whatever your header file is named.h"

在.cpp代码的顶部。然后再次运行。


2

从零开始启动ms c ++ 2010项目时,我遇到了同样的问题-我删除了ms生成的所有头文件,但使用了:

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

int main() {
   cout << "hey" << endl;
   return 0;
}

我必须包含stdafx.h它,因为没有包含它会导致错误。


2

在开始该程序之前,请删除所有代码,并在main内部进行简单的问候。仅包括iostream并使用命名空间std;。一点一点地添加到它来找到您的问题。

cout << "hi" << endl;

我只是做了,但什么都没改变
Wallter

好的,其他人都说。摆脱所有代码。只需保留using名称空间和标头iostream。然后将其放入:int main(void){std :: cout <<“你好,世界!” << std :: endl; 返回0; }告诉我们是否可行。
2009年

1
如果它不能使用just编译文件#include <iostream> int main() { std::cout << "ok"; },则在C ++实现中会严重破坏某些内容。您正在使用什么编译器?
帕维尔·米纳夫

也是主要的不是主要的。大小写在C ++中很重要。我建议您google C ++ hello world。
2009年

删除函数bob之后的半冒号。它先于main,因此您不需要它。
2009年

1

您确定将其编译为C ++吗?检查您的文件名(应以结尾.cpp)。检查您的项目设置。

您的程序完全没有错,并且coutnamespace std。VS 2010 Beta 2的安装有缺陷,我认为这不仅仅是您的安装。

我认为VS 2010还没有为C ++做好准备。标准的“ Hello,World”程序在Beta 1上不起作用。我只是尝试创建一个测试Win32控制台应用程序,并且生成的test.cpp文件没有main()功能。

我对VS 2010有一种非常非常糟糕的感觉。


2
鉴于VS2010是使用自身编写的(并使用VC10编译器进行编译,并且代码使用了lambda等新的C ++ 0x功能),因此我可以向您保证它已经为C ++做好了准备。如果您在“ Hello,world”应用程序方面遇到问题,则听起来像是安装失败(可能是错误)或某些安装后错误。无论哪种方式都不正常,并且绝对不是beta 1或beta 2中的正常体验,因此请在Connect上将其报告为错误。
帕维尔米纳夫

@Pavel:谢谢;如您所知,我还没有开始工作。有时这个当前的危机后,我会尽力得到一些bug报告英寸
大卫·索恩利


1

创建项目时,未正确设置“使用预编译头”。在properties-> C / C ++->预编译头中更改它。


1

在Visual Studio中,使用“ stdafx.h”下的所有头文件。



0

通常存储在C:\ Program Files \ Microsoft Visual Studio 8 \ VC \ include文件夹中。首先检查它是否仍然存在。然后选择“工具+选项”,“项目和解决方案”,“ VC ++目录”,在““显示目录””组合框中选择“包含文件”,并再次确认$(VCInstallDir)include在列表顶部。


0

在安装了vs 2010之后,尝试使几乎相同的程序正常工作后,我遇到了此错误。

我之前在unix风格的盒子上完成过香草C编码,所以我决定自己玩一点。

我尝试的第一个程序是:

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World!";
    return 0;
}

这里要注意的一件大事...如果您曾经做过任何C编码,

int _tmain(int argc, _TCHAR* argv[])

看起来很奇怪。它应该是:

int main( int argc, char ** argv )

就我而言,我只是将程序更改为:

#include <iostream>
using namespace std;

int main()
{
     cout << "Hello world from  VS 2010!\n";
     return 0;
}

而且效果很好。

注意:使用CTRL + F5,以便控制台窗口始终存在,以便您看到结果。


0

只需使用printf

包含stdio.h在的stdafx.h头文件中printf


0

我来这里是因为我遇到了同样的问题,但是当我这样做#include "stdafx.h"时却说找不到该文件。
什么做的把戏对我来说是:#include <algorithm>
我使用Microsoft Visual Studio2008。
这些都是您可以使用的东西,包括。“计数”:链接


0

在VS2017,stdafx.h似乎被替换pch.h看到这篇文章

因此使用:

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

using namespace std;

int main() {
    cout << "Enter 2 numbers:" << endl;

-5

那是编译器-我现在正在使用Eclipse Galileo,该程序的运行就像一个奇迹



它是编译器,在Visual Studio处于Beta阶段时,这是它们以后会从编译器中调试出来的错误之一。我现在使用的是Visual Studio 2010编译器的正式版本,一切正常。毫无疑问,编译器就是问题所在。(如下文中的Amelia所述-在这个问题上我并不孤单)
Wallter

1
除了Amelia谈论的是其他编译器(绝对没有此问题)。顺便说一句,如果您编辑问题以明确提到该问题与2010 beta有关,那是很好的。如果某些新手编写了错误的代码,然后看到您的问题并假设VS2010刚刚被破坏,那将是可耻的。
jalf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.