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

我得到所有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' 

遵循这个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; 

在你的课堂上,这就是为什么它的工作原理。

你可以使用命名空间

http://www.daniweb.com/software-development/cpp/threads/109029/what-its-the-use-of-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()开始。 只是试一试。