为什么VS2010中的"ambigous symbol"错误代码如下?

Joh*_*ane 2 c++ stream forward-declaration

这段代码在VS2010中编译,我相信它适用于任何编译器.

#include <iosfwd>
using namespace std;
class ostream;
int main() {}
Run Code Online (Sandbox Code Playgroud)

这段代码也是如此

#include <iosfwd>
using namespace std;
int main() { class ostream; }
Run Code Online (Sandbox Code Playgroud)

但是此代码生成错误C2872:'ostream':模糊符号

#include <iosfwd>
using namespace std;
class ostream;
int main() { class ostream; }
Run Code Online (Sandbox Code Playgroud)

Pub*_*bby 6

ostream在范围中有两个类:::std::ostream::ostream.如果要转发声明,则必须在正确的命名空间中执行此操作:

#include <iosfwd>
using namespace std;
namespace std {
    class ostream;
}
int main() { class ostream; }
Run Code Online (Sandbox Code Playgroud)

无论如何,这在这种情况下不起作用,因为它ostream是一个typedef basic_ostream,而不是一个单独的类.只需包含iosfwd标题,因为它向前声明了一切.