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

时间:2012-06-08 13:47:00

标签: 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’

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

7 个答案:

答案 0 :(得分:119)

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

#include <iostream.h>

#include <iostream>

前者是预标准的,您只需说cout而不是std::cout,而无需任何其他内容。您可以通过添加

在标准C ++中获得相同的行为
using std::cout;

using namespace std;

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

答案 1 :(得分:24)

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

using namespace std;
在你的代码中

以获得它。

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

答案 2 :(得分:13)

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

using namespace std;

在你的课程中,这就是它起作用的原因。

答案 3 :(得分:6)

答案 4 :(得分:3)

您之前在课堂上的代码中可能有using namespace std;。这明确告诉预编译器在std中查找符号,这意味着您不需要std::。尽管std::cout代替cout是一种很好的做法,但每次都明确调用std::cout。这样,如果您使用的是另一个重新定义cout的库,您仍然具有std::cout行为,而不是其他一些自定义行为。

答案 5 :(得分:1)

“std”是用于STL(标准模板库)的命名空间。请参阅http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B

你可以写“use namespace std;”在使用任何stl函数,变量或只是inser“std ::”之前。

答案 6 :(得分:-2)

如果您在ROOT工作,您甚至不必撰写#include<iostream>using namespace std;只需从int filename()开始。

这将解决问题。