65

我收到所有这些错误消息,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::在任何这些命令之前编写 a。这个系统可能有什么不同?

4

7 回答 7

128

您的班级似乎可能一直在使用准标准 C++。一个简单的判断方法是查看您的旧程序并检查您是否看到:

#include <iostream.h>

或者

#include <iostream>

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

using std::cout;

或者

using namespace std;

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

于 2012-06-08T13:49:39.383 回答
24

在 C++ 标准中,cout是在命名空间中定义的std,所以你需要说std::cout或放

using namespace std;

在你的代码中,以便得到它。

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

于 2012-06-08T13:49:12.347 回答
13

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

using namespace std;

在你的课堂上,这就是它起作用的原因。

于 2012-06-08T13:48:02.980 回答
7

您可以使用命名空间

http://www.daniweb.com/software-development/cpp/threads/109029/what-its-the-use-of-using-namespace-std

但你可能会冒犯某人

为什么“使用命名空间标准”被认为是不好的做法?

于 2012-06-08T13:51:51.873 回答
3

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

于 2012-06-08T13:49:48.673 回答
1

“std”是用于 STL(标准模板库)的命名空间。请参考https://en.wikipedia.org/wiki/Namespace#Use_in_common_languages

您可以using namespace std;在使用任何 stl 函数、变量之前编写,也可以std::在它们之前插入。

于 2012-06-08T13:51:43.767 回答
-2

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

这将解决问题。

于 2017-08-18T06:16:00.290 回答