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:
编译器在声明类的时候就必须知道该类的大小。