gpt4 book ai didi

c++ - 为什么不允许在同一个类中定义一个类对象?

转载 作者:太空宇宙 更新时间:2023-11-04 16:16:07 25 4
gpt4 key购买 nike

这是我的代码:

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* 变量。

关于c++ - 为什么不允许在同一个类中定义一个类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22368353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com