命名空间'std'中的'ostream'未命名类型

sky*_*yel 3 c++ linux gcc g++

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

另一方面,如果我从所述文件中提取代码并创建一个单独的源并使用g++ <source_file>它编译它,但如果我编译g++ -I<path_to_libotb_headers> <source_file>我得到相同的错误,虽然源文件不包含任何来自所述路径.

如下面的评论所述,这个问题很简单

#include <iostream>   

int main                                                                                
{
    std::cerr << "Test";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 5

#include <ostream>
Run Code Online (Sandbox Code Playgroud)

应该解决它.在C++ 11下,#include <iostream>应该引入所有内容<ostream>,但在C++ 11之前,你必须完成个人#includes.


jus*_*tin 1

验证您的 include 是否全部关闭了其名称空间 - 如果先前的标头未关闭其名称空间,则您的 include 可能会意外地在名称空间中声明。

您还可以尝试通过将 std include 移动到包含列表的前面来尝试定位此问题。