gpt4 book ai didi

C++ #include 循环

转载 作者:太空狗 更新时间:2023-10-29 23:50:25 47 4
gpt4 key购买 nike

文件 Dog.h

#ifndef DOG_H
#define DOG_H

#include "Cat.h"
//class Cat;

class Dog
{
Cat c;
};

#endif

文件 Cat.h

#ifndef CAT_H
#define CAT_H

#include "Dog.h"
//class Dog;

class Cat
{
Dog d;
};

#endif

这会导致循环,问题是两个类都需要相互了解;前向声明也不能解决问题。您可以创建 Dog d 或 Cat c 的指针来解决它。

问题:是否真的没有办法不创建指针,即保持代码原样而不重写我想要的代码?

最佳答案

你想做的事是不可能的。您的类(class)将占用无限空间。

你有一个 Dog,它有一个 Cat 成员变量,它有一个 Dog 成员变量,它有一个 Cat成员变量,其中有一个Dog成员变量...

如果不在某个地方用指针破坏它,你最终会得到无限递归成员变量占用无限内存,这是不可能的。

请注意,由于无限递归,编译器甚至无法实际计算出 DogCat 所需的内存。但是由于 C++ 中的类通常不能为 0 大小,我们知道它无论如何都会是无限空间。

其他答案也给出了很好的观点,即“先有鸡还是先有蛋”的问题,必须先定义一个才能定义另一个。


我只是想补充一点,相互递归类是一种奇怪的东西,如果你能以其他方式设计它,最好避免。如果您真的必须使用它们,请确保您确实打破了递归性。否则,如果你得到一个天真的实现,它的指针在构造时进行无限相互递归 new 调用,那么你只能将它从编译时由于无限相互递归导致的错误转移到内存不足和运行时崩溃时间。

关于C++ #include 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485817/

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