gpt4 book ai didi

C++包含头文件

转载 作者:行者123 更新时间:2023-11-28 03:38:32 24 4
gpt4 key购买 nike

所以,我遇到了一个问题:

A类需要了解B类,B类需要了解C类,C类需要了解A类。它本质上是一个圆圈,所以我得到了定义错误。我尝试了前向声明,但无论顶部是什么,都不知道底部还有什么。

遇到这种情况我该怎么办?

谢谢

大卫

最佳答案

假设这很简单,Adam Mihalcin 上面的评论是正确的,因为类似的问题回答了它。但无论如何我都会把它编码出来。

假设你有这个(方法定义无关紧要):

class A
{
B* ptrB;
}

class B
{
C* ptrC;
}

class C
{
A* ptrA;
}

然后你可以,正如 Adam 所链接的那样,像这样转发所有 3 个:

class A;
class B;
class C;

然后将那个方 block 放在所有 3 个方 block 的上方。但这里重要的是,这是当有指向其他类的指针时,而不是它们作为类的一部分的组合。您可以使用前向声明来允许在处理指针时正确编译,但不能处理其他数据类型。所以如果有这个:

class D
{
B myB;
}

如果其他所有内容都与上述相同,您需要将 B 的“真实”定义置于 D 的“真实”定义之上。但其余部分可能相同。前向声明仅对指针“有效”。

你必须在某处用指针打破你的依赖循环。如果从来没有指针,那么数据结构就是“无限”的,因此不起作用。那是因为在我的示例中,D 总是 包含 B。但是如果 A 总是包含 B,B 总是包含 C,C 总是包含 A 呢?好吧,最后的 A 需要另一个 B,它需要另一个 C,它...我希望你明白了。但是有了指针,你可以循环它。使用组合(不是指针)它不能循环。

关于C++包含头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082657/

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