【问题标题】:Why std::cout instead of simply cout?为什么 std::cout 而不是简单的 cout?
【发布时间】:2012-06-12 14:03:51
【问题描述】:

我收到所有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::。这个系统可能有什么不同?

【问题讨论】:

  • 你必须说你正在使用 std 让它知道 cout 是什么。如果您将其作为导入执行,则可以简单地说 cout,否则您必须充分证明它的合理性才能告诉编译器 cout actuallt 是什么
  • 恭喜,你是导入 std 命名空间的愚蠢习惯的第 1000000 个受害者,我见过的每一门 C++ 入门课程似乎都采用了这种愚蠢的习惯......
  • 抱歉 Luc,使用语言 进行编码并不仅限于正在听有关该语言的入门课程的一小部分人。
  • @erikb85 我认为他的投诉是针对那些没有参加课程的人!
  • @EdwardBlack 相反,使用命名空间std 也不错。导入它包含的所有名称(使用using namespace std 指令)只是为了避免输入std:: 前缀是不好的,因为这违背了命名空间的目的。 (见this faq)。我 3 岁时的咆哮是针对 C++ 入门课程和系统地做到这一点的示例,从而向 C++ 学习者灌输坏习惯。

标签: c++ iostream


【解决方案1】:

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

#include <iostream.h>

#include <iostream>

前者是预标准的,您可以只说cout 而不是std::cout,无需任何额外内容。您可以通过添加在标准 C++ 中获得相同的行为

using std::cout;

using namespace std;

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

【讨论】:

【解决方案2】:

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

using namespace std;

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

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

【讨论】:

    【解决方案3】:

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

    using namespace std;
    

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

    【讨论】:

      【解决方案4】:
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 迂腐,也许:实际上是 C++ 标准库元素,而不仅仅是 STL,它们位于命名空间 std。参考 C++03:17.4.1.1/2:“除宏、运算符 new 和运算符 delete 之外的所有 [C++ 标准] 库实体都定义在命名空间 std 或嵌套在命名空间 std 中的命名空间。”
        【解决方案7】:

        如果你在ROOT中工作,你甚至不必写#include&lt;iostream&gt;using namespace std;,只需从int filename()开始。

        这将解决问题。

        【讨论】:

          猜你喜欢
          • 2021-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多