私はなぜこのような奇妙な問題が発生しているのですか?第三にはないながら、第一次のコードスニペットの第二は、コンパイル:パラメータとしてプライベートネストされた型を使用する
はコンパイル:
class Foo {
public:
Foo() { Bar(); }
private:
class Bar {};
};
はコンパイル:
class Foo {
class Bar {}; // Or only forward declare here and define later
public:
Foo(Bar) {}
}
はコンパイルされません
class Foo {
public:
Foo(Bar) {}
private:
class Bar {};
};
最初のことができている間に3番目のものがコンパイルに失敗するのは何ですか?
うわーを。オプション3は、VS2015のコンパイラが死んでしまう。コンパイラが頻繁にクラッシュするのを見ないでください。 – user4581301
とにかく、 'Foo'3のコンストラクタは' Foo :: Bar'を提供しなければならず、プライベートなのでできません。これは、このコードを不整合な状態にします。それはコンパイルされませんが、ルールを引用することはできません。しかし、なぜ2番目のものがコンパイルされますか? 'Bar'もプライベートになりますが、' Foo'コンストラクタの前に定義されます。 – user4581301