我收到了所有cout
和endl
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::
。这个系统可能有什么不同?
答案 0 :(得分:119)
您的班级可能一直在使用预标准C ++。一个简单的方法是看看你的旧程序并检查,你看到了吗?
#include <iostream.h>
或
#include <iostream>
前者是预标准的,您只需说cout
而不是std::cout
,而无需任何其他内容。您可以通过添加
using std::cout;
或
using namespace std;
无论如何,只有一个想法。
答案 1 :(得分:24)
在C ++标准中,cout
在std
命名空间中定义,因此您需要说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()
开始。
这将解决问题。