2

このコードは VS2010 でコンパイルされますが、どのコンパイラでもコンパイルできると思います。

#include <iosfwd>
using namespace std;
class ostream;
int main() {}

このコードでも同じことが起こります

#include <iosfwd>
using namespace std;
int main() { class ostream; }

しかし、このコードはエラー C2872 を生成します: 'ostream' : あいまいなシンボル

#include <iosfwd>
using namespace std;
class ostream;
int main() { class ostream; }
4

1 に答える 1

6

ostreamスコープには、 と という名前の::std::ostream2つのクラスがあります::ostream。前方宣言する場合は、正しい名前空間で行う必要があります。

#include <iosfwd>
using namespace std;
namespace std {
    class ostream;
}
int main() { class ostream; }

とにかく、これはこの場合は機能しません。これは、別のクラスではなく のostreamtypedef であるためです。basic_ostreamすべてを宣言するヘッダーを含めるだけiosfwdです。

于 2013-01-03T20:44:51.357 に答える