这是我的代码:
class Link;
class LinkScreen;
class LinkScreen {
Link* linkScreen1;
LinkScreen linkScreen2;
};
class Link {};
make
错误:test.cpp:6:16: error: field ‘linkScreen2’ has incomplete type
为什么不允许这样做?
最佳答案
类不能包含其自身的实例,因为这会使实例占用无限量的空间。
考虑一下:创建一个LinkScreen
对象……包含另一个LinkScreen
对象……包含另一个LinkScreen
对象,其中又包含另一个,依此类推。
或者,换一种方式来看,LinkScreen
对象的大小是多少?好吧,它就是它包含的变量的大小:Link*
(通常为4或8个字节)加上LinkScreen
对象的大小。但是那有多大?好吧,它是Link*
的大小加上LinkScreen
的大小。您可以在此处看到无限递归。
您只能创建“完整”类型的实例,对于一个类而言,这意味着编译器已经看到了类定义的结尾。这样可以防止您将实例放入类本身。但是,您可以创建一个指向不完整类型的指针。 LinkScreen
对象包含LinkScreen*
变量是可以的。