class test
{
private:
test *n1;
};
int main()
{
return 0;
}//正确
class test
{
private:
test n1;
};
int main()
{
return 0;
}//错误
你想,假如这是允许的,那么test类对象里面有一个test类对象n1,这个n1里面也应该还有一个test类对象n1,n1复n1,会如此无限自我循环下去。所以编译时期编译器就不知道class test的大小了,就报错。
就像你要计算一个箱子的大小,这个箱子的大小又包括一个另一个一模一样的箱子,这样就循环了,所以编译器就傻了,不知道该怎么办了。
而对于指针类型 test *n1;,n1的大小是固定的,如四个字节,所以编译器知道class test的大小。
Tip:
编译器在声明类的时候就必须知道该类的大小。
本文探讨了C++中类定义内部包含同一类对象作为成员变量的问题,并解释为何直接使用对象会导致编译错误,而使用指向该类的指针则可以避免此问题。通过具体代码示例说明了编译器如何处理这些情况。
4117

被折叠的 条评论
为什么被折叠?



