为什么std :: cout而不是简单的cout?
我得到所有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'
遵循这个build议,一切都很好。 现在我很好奇,为什么我必须这样做。 我们之前在类中使用了C ++,但是我从来std::
在任何这些命令之前写入std::
。 这个系统可能有什么不同?
看起来你的类可能已经使用了预标准的C ++。 一个简单的方法来看,是看看你的旧程序,并检查,你看到:
#include <iostream.h>
要么
#include <iostream>
前者是标准的,你可以只说cout
而不是std::cout
而不需要额外的东西。 通过添加,您可以在标准C ++中获得相同的行为
using std::cout;
要么
using namespace std;
无论如何,只有一个想法。
在C ++标准中, cout
是在std
命名空间中定义的,所以你需要说std::cout
或put
using namespace std;
在你的代码为了得到它。
然而,情况并非总是如此,过去的cout
只是在全局命名空间(或者后来的全局命名空间)中。 因此,我会得出结论:你的类使用了一个较老的C ++编译器。
标准模板/ Iostream库中的所有内容都驻留在命名空间std中。 你可能用过:
using namespace std;
在你的课堂上,这就是为什么它的工作原理。
你可以使用命名空间
但是你可能会冒犯别人
为什么“使用命名空间标准”被认为是不好的做法?
你可能已经using namespace std;
之前在你的代码,你在课堂上做。 这明确告诉预编译器在std
寻找符号,这意味着你不需要std::
。 虽然这是std::cout
而不是cout
好习惯,所以你每次都明确地调用std::cout
。 这样,如果你正在使用另一个库重新定义cout
,你仍然有std::cout
行为,而不是一些其他的自定义行为。
“std”是用于STL(标准模板库)的名称空间。 请参阅http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B
你可以写“use namespace std;” 之前使用任何stl函数,variables或只是inser“std ::”之前。
如果在ROOT中工作,你甚至不需要编写#include和using namespace std; 只需从int filename()开始。 只是试一试。