2016-05-17 114 views
0

不幸的是,我得到了一个包含结构,导致一个问题,其中类Z需要包括类A因为继承,但Z首先被包含。 一个littlebit更加清晰:奇怪的包括依赖

A.h includes B.h 
B.h includes C.h 
C.h includes D.h 
D.h includes Z.h 

所以ž被定义A之前这将导致一个错误,说“基类未定义”。 我不能使用forward decleration,因为在每个类中我调用了包含的类的函数。

我希望有任何解决方案来解决这个问题。

+0

看起来像你想:http://stackoverflow.com/questions/7714345/forward-declaration-with-vector-of-class-type-pointer-to-incomplete-class-type – NathanOliver

回答

1

我希望有任何解决方案来解决这个问题。

不,不是一个快速修复。你需要重构你的代码,至少w.r.t.到包括。

你可以探索模板来协助,但它们可能更麻烦。

除非“是一个”关系是适用的,则可以删除A作为基类和移动它是一个构件(经由。std::shared_ptr<A>std::unique_ptr<A>)和前向声明A。如果“is-a”关系适用,那么你有循环依赖,你需要以某种方式打破(再次,智能指针可以帮助)。

您不提cpp文件的使用或要求;使用cpp文件(Z.cpp)隔离调用A成员的代码,这样可以降低头部要求。