我使用前向声明阅读how this can be made to work。
class A
{
public:
B *objB;
void foo(){}
}
class B
{
public:
A *objA;
void foo(){}
}
只想确认这种设计是否可行?
class A
{
public:
B objB;
void foo(){}
}
class B
{
public:
A objA;
void foo(){}
}
PS:如果有人也可以解释为什么/为什么不能在逻辑上按类来解释,而不仅仅是语言方面,比如引用一些例子。这究竟是什么意味着课程?
答案 0 :(得分:11)
第二个例子是不可能的。它表示为A
分配的空间包含B
的空间,后者又包含A
的空间等。这将需要无限的内存,并且需要无限的时间来构建。
答案 1 :(得分:3)
不,无论是在语言方面还是在课堂方面都无法实现。
就类而言:每个实例包含一个B实例,其中包含一个实例,其中... =>无限递归。这不是指针版本的问题,因为指针可能不指向有效对象,或者所有A指针可能指向同一对象等。
答案 2 :(得分:0)
相互递归的类,例如你的第二个例子是不可能的。如果每个实例都有另一个类的相应实例,并且因为没有基本情况来停止递归,那么类的大小将是无限的。显然,实例化如此庞大的类很难。
答案 3 :(得分:-1)
已声明但未定义的类,或未知大小或不完整元素类型的数组,是一个未完全定义的对象类型.43不完全定义的对象类型和void类型是不完整类型(3.9.1 )。对象不得定义为不完整类型。
在你的第二个例子中,A类试图定义一个不完整类型的成员变量,因此形成不良。