为什么std :: cout而不是简单的cout?

eri*_*ork 60 c++ iostream

我得到所有这些错误消息coutendl:

main.cc:17:5: error: ‘cout’ was not declared in this scope
main.cc:17:5: note: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: note:   ‘std::cout’
Run Code Online (Sandbox Code Playgroud)

按照这个建议,一切都很好.现在我很好奇,为什么我必须那样做.我们之前在类中使用过C++,但是我从来没有std::在任何这些命令之前写过.这个系统可能有什么不同?

Fat*_*ror 121

您的班级可能一直在使用预标准C++.一个简单的方法就是看看你的旧程序并检查,你看到了:

#include <iostream.h>
Run Code Online (Sandbox Code Playgroud)

要么

#include <iostream>
Run Code Online (Sandbox Code Playgroud)

前者是预先标准的,你可以只说cout而不是std::cout没有任何额外的东西.您可以通过添加在标准C++中获得相同的行为

using std::cout;
Run Code Online (Sandbox Code Playgroud)

要么

using namespace std;
Run Code Online (Sandbox Code Playgroud)

无论如何,只有一个想法.

  • 请不要使用`using namespace std;`,例如参见http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice (8认同)

Mat*_*ton 24

在C++标准中,cout是在std命名空间中定义的,因此您需要说std::cout或放

using namespace std;
Run Code Online (Sandbox Code Playgroud)

在你的代码中,以获得它.

然而,情况并非总是如此,并且过去cout只是在全局命名空间中(或者,稍后在全局命名空间中std).因此,我的结论是您的类使用了较旧的C++编译器.


mfo*_*ini 13

标准模板/ Iostream库中的所有内容都位于名称空间std中.你可能用过:

using namespace std;
Run Code Online (Sandbox Code Playgroud)

在你的课堂上,这就是它的原因.