这是我的代码:

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*变量是可以的。

10-08 11:11