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)
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标题,因为它向前声明了一切.