2

ネストされたクラスを定義してから、次のようなインスタンスを作成すると:

class A  
{   
    class B  
    {  
        ...
    };
    B b; 
};

全て大丈夫。しかし、B を A の内部で宣言し、それを外部で定義するだけでは、B のインスタンスを作成できません。これはおそらく、コンパイラが B のインスタンスに必要なスペースを認識していないためです。しかし、別のクラス内でクラスを定義すると、コードはあまり読みにくくなります。これを機能させる方法はありますか?

class A  
{
    class B;
    B b;
};
class A::B
{
    ...
};
4

2 に答える 2

1

クラス型をメンバーとして使用する場合は、具象クラスを知る必要があります。そのため、2番目のケースは機能しません。回避策は、B:へのポインタを使用することです。

#include <memory>
class A  
{
    class B;
    std::unique_ptr<B> b;
};
class A::B
{    
};
于 2013-02-03T22:45:22.547 に答える
1

簡単です。クラス B を定義してから、A でそのインスタンスを定義するだけです。

class B
{
}
class A
{
   B memberB;
}

または、前方宣言することもできます:

class B;
class A
{
   B memberB;
}
class B
{
}

真にネストされたクラスが必要になることはめったになく、まったく役に立ちません。

于 2013-02-03T21:45:21.960 に答える