web-dev-qa-db-ja.com

ソースファイル内のネストされたクラス定義

ネストされたクラスがある場合:

  class MyClass
  {
    class NestedClass
    {
    public:
      // nested class members AND definitions here
    };

    // main class members here
  };

現在、MyClassの定義はCPPファイルにありますが、NestedClassの定義はヘッダーファイルにあります。つまり、CPPファイルで関数/コンストラクターを宣言できません。

だから私の質問は、cppファイルでNestedClassの関数をどのように定義するのですか?私ができない場合、その理由は何ですか(そして、これが事実である場合、私はこれがなぜ起こるかについて漠然とした考えを持っていますが、私は良い説明を求めています)?構造はどうですか?

33
Samaursa

あなたはできる。内部クラスに次のようなメソッドがある場合:

  class MyClass   {
    class NestedClass
    {
    public:
      void someMethod();
    };

    // main class members here
  };

...次のように.cppファイルで定義できます。

void MyClass::NestedClass::someMethod() {
   // blah
}

構造体はC++のクラスとほとんど同じです—アクセスのためにデフォルトで 'public'になっています。他のすべての点でクラスと同様に扱われます。

あなたはcan(コメントに記載されているように)内部クラスを宣言するだけです、例えば:

class MyClass   {
    class NestedClass;
    // blah
};

..次に、それを実装ファイルで定義します。

class MyClass::NestedClass {
  // etc.
};
52
sje397