【发布时间】:2018-01-10 12:54:41
【问题描述】:
我正在编写我的项目,我遇到了这个问题。 我有 2 个标题,每个都有一个类,需要另一个,如下所示。
我认为这只是需要使用 foward 声明,但仍然不起作用。 我没有想法。
寻求帮助:D
Headers 、 Main 和编译器错误如下所列:
标题 1
#ifndef OBJ2_H
#define OBJ2_H
#include "obj1.h"
class obj1;
class obj2{
public:
obj1 e;
};
#endif // OBJ2_H
标题 2
#ifndef OBJ1_H
#define OBJ1_H
#include "obj2.h"
class obj2;
class obj1
{
obj2 e;
};
#endif // OBJ1_H
主要
#include <iostream>
#include "obj1.h"
#include "obj2.h"
using namespace std;
int main()
{
obj1 class1;
obj2 class2;
cout << "Hello world!" << endl;
return 0;
}
错误:
- include\obj2.h|8|错误:字段“e”的类型“obj1”不完整|
- include\obj1.h|8|错误:字段“e”的类型“obj2”不完整|
【问题讨论】:
-
objects、instance 的声明需要类或结构的完整定义。您可以使用指针或引用绕过它。或者通过修改您的设计,使您没有循环依赖。
-
如果每个
obj1里面都有一个obj2,反之亦然,你期望obj1有多大? -
无意冒犯,但
obj1和obj2在您编写时都没有任何意义。如果有可能你写的东西他们都会使用无限量的内存(对不起剧透) -
顺便说一句,没有什么需要你编写这样的类,所以你需要修复你的设计,而不是试图以某种方式强制它
-
如果您解释了为什么需要这种循环依赖,我们可能会建议另一种设计。循环依赖暗示糟糕的代码设计