【问题标题】:‘ostream’ in namespace ‘std’ does not name a type命名空间“std”中的“ostream”未命名类型
【发布时间】:2012-11-08 09:48:29
【问题描述】:

正如标题所示,我遇到了一个相当奇怪的问题。当我尝试编译示例源代码(使用 libotb)时,我不断收到类似标题中的错误。奇怪的是#include <iostream> 出现在报告错误的所述源/标头中。

另一方面,如果我从上述文件中提取代码并创建一个单独的源并使用g++ <source_file> 编译它,它可以工作,但是如果我使用g++ -I<path_to_libotb_headers> <source_file> 编译,我会得到同样的错误,尽管源文件没有'不包括来自所述路径的任何内容。

如以下 cmets 所述,此问题仅发生在

#include <iostream>   

int main                                                                                
{
    std::cerr << "Test";
    return 0;
}

【问题讨论】:

  • 那么问题是什么?一些我们没有看到的代码包含错误。我们对此无能为力
  • 你是用using namespace std还是std::前缀?
  • @jalf:代码有什么相关性吗?
  • 此答案可能有助于验证您在更改包含路径 (g++ -H) stackoverflow.com/a/6685693/104774 时是否确实包含了预期的标头
  • 是否可能path_to_libotb_headers 会导致一个名为iostream 的标头以便被拾取?

标签: c++ linux gcc g++


【解决方案1】:
#include <ostream>

应该修复它。在 C++11 下,#include &lt;iostream&gt; 应该包含所有 &lt;ostream&gt;,但在 C++11 之前,您必须单独执行 #includes。

【讨论】:

    【解决方案2】:

    应该是:

    int main()

    • 你错过了 () :)

    【讨论】:

      【解决方案3】:

      验证您的包含是否都关闭了它们的命名空间——如果之前的标头没有关闭其命名空间,您的包含可能会意外地在命名空间中声明。

      您也可以尝试通过将 std 包含移到包含列表中的更早位置来定位此问题。

      【讨论】:

        【解决方案4】:

        如果您是 Arduino 程序员,请不要忘记 Arduino 没有任何 内置正常的“ostream”东西。
        但也有提供类似功能的库。

        附言。请记住,不包括流式类型的东西是有充分理由的。

        【讨论】:

          猜你喜欢
          • 2013-05-27
          • 1970-01-01
          • 2012-12-20
          • 2015-05-08
          • 2011-12-03
          • 1970-01-01
          • 2017-06-06
          • 2014-08-18
          • 1970-01-01
          相关资源
          最近更新 更多