我正在使用visual studio 2010开发一个C ++程序。我有这些类定义&头文件:
s.h:
class s : oe {
...
};
t.h:
class t : oe {
...
};
oe.h:
class oe {
...
o getO();//we reference to class 'o' in oe.h, so we must include o.h begore oe.h
};
&安培; o.h:
class o {
...
s getS();//we reference to class 's' in o.h, so we must include s.h begore o.h
};
问题是我们引用了oe.h
中的“o”类,因此我们必须在o.h
之前加入oe.h
,&我们也引用了o.h
中的班级',因此我们必须在s.h
之前加入o.h
,但我们不能这样做,因为s.h
需要oe.h
&安培; oe.h
需要o.h
& o.h
需要s.h
!
如你所见,类依赖循环中存在某种循环。所以我无法编译项目。如果我删除s.h和amp;之间的依赖关系t.h& oe.h,问题将解决(此状态为stdafx.h
):
#include "s.h"
#include "t.h"
#include "o.h"
#include "oe.h"
但我必须使用所有给定的依赖关系&我无法删除任何依赖项。任何想法?
答案 0 :(得分:5)
您可以使用转发声明来解决此问题,并将实施移至实施文件。
而不是包含s
的标题,只需向前声明它:
class s;
您可以将它用作除类的数据成员之外的任何其他类型的不完整类型。 (假设实现是分开的)。
这很可能不会解决潜在的问题,这是您的设计。
答案 1 :(得分:0)
前向声明不仅适用于返回值的指针/引用。
所以,你可以这样做:
<强> oe.h:强>
class o;
class oe {
o getO();
};
<强> oe.cpp:强>
#include "oe.h"
#include "o.h"
o oe::getO() {
return o();
}
根据需要进行冲洗并重复...由于#include
文件中不再有.h
个,因此没有机会进行循环包含依赖项。