如何创建在封闭类之外定义的嵌套类的实例?

时间:2013-02-03 21:39:23

标签: c++

如果我定义一个嵌套类,然后创建一个这样的实例:

class A  
{   
    class B  
    {  
        ...
    };
    B b; 
};
一切都好。但是如果我只是在A中声明B并​​在外面定义它,我就无法创建B的实例,可能是因为编译器不知道B实例需要多少空间。但是当您在另一个内部定义类时,代码的可读性不高。有没有办法使这项工作?

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

2 个答案:

答案 0 :(得分:1)

简单,只需定义B类,然后在A中定义它的实例。

class B
{
}
class A
{
   B memberB;
}

或者你可以转发声明:

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

很少需要真正嵌套的类,而且根本不是很有用。

答案 1 :(得分:1)

当您使用类类型作为成员时,需要知道具体类。这就是为什么你的第二个案例不起作用的原因。解决方法是使用指针B

#include <memory>
class A  
{
    class B;
    std::unique_ptr<B> b;
};
class A::B
{    
};