4

Outer.hpp

class Outer {
  class Inner {
    Inner() {}
  };
  static Inner inner;
}

Outer.cpp(トップレベル、たとえば関数本体内ではない):

Outer::Inner Outer::inner;

次のエラーが発生します。

error C2248: 'Outer::Inner::inner' : cannot access private member declared in class 'Outer::Inner'

C ++ 11(Visual Studio 2010)に完全に準拠したコンパイラを使用していないため、宣言時にフィールドを定義することはできません。

4

2 に答える 2

4

秘訣はOuter友達を作ることですInner

Outer.hpp

class Outer {
  class Inner {
    Inner() {}
    friend Outer;
  }
  static Inner inner;
}

これで、実装ファイルでもプライベートではないかのようにのタイプをOuter確認できるため、 Outer.cppでの初期化は成功します。Inner

于 2013-03-18T12:53:13.420 に答える
1

いいえ、友だちにする必要はありません。悪いアイデア。

クラスInnerは、クラスOuterのプライベートメンバーです。それは何も悪いことではありません。

問題は、定義をどこに配置したかによって異なります。

Outer::Inner Outer::inner; // is fine in the global space.
int main()
{
    Outer::Inner Outer::inner; // Fails because it's used as a local variable to function main.
}
于 2013-03-18T13:52:26.290 に答える