奇怪的包含依赖
strange include dependency
不幸的是,我得到了一个包含结构,它导致了 class Z 由于继承需要包含 class A 的问题,但 Z 被首先包含。
更清楚一点:
A.h includes B.h
B.h includes C.h
C.h includes D.h
D.h includes Z.h
所以 Z 在 A 之前定义。这会导致错误 "Baseclass A undefined"。
我不能使用前向减速,因为在每个 class 中我调用了我包含的 classes 的函数。
我希望有任何解决方案可以解决这个问题。
I hope there is any solution to come around that problem.
不,不是快速修复。您需要重构您的代码,至少 w.r.t。包括在内。
您可以探索模板来提供帮助,但它们可能比需要的更麻烦。
除非 "is-a" 关系适用,您可以删除 A
作为基础 class 并将其移动为成员(通过。 std::shared_ptr<A>
或 std::unique_ptr<A>
) 并向前声明 A
。如果 "is-a" 关系适用,那么您将需要以某种方式打破循环依赖(同样,智能指针可以提供帮助)。
你没有提到cpp文件的用途或要求;使用 cpp 文件 (Z.cpp) 隔离调用 A
成员的代码,这样 header 要求就会降低。
不幸的是,我得到了一个包含结构,它导致了 class Z 由于继承需要包含 class A 的问题,但 Z 被首先包含。 更清楚一点:
A.h includes B.h
B.h includes C.h
C.h includes D.h
D.h includes Z.h
所以 Z 在 A 之前定义。这会导致错误 "Baseclass A undefined"。 我不能使用前向减速,因为在每个 class 中我调用了我包含的 classes 的函数。
我希望有任何解决方案可以解决这个问题。
I hope there is any solution to come around that problem.
不,不是快速修复。您需要重构您的代码,至少 w.r.t。包括在内。
您可以探索模板来提供帮助,但它们可能比需要的更麻烦。
除非 "is-a" 关系适用,您可以删除 A
作为基础 class 并将其移动为成员(通过。 std::shared_ptr<A>
或 std::unique_ptr<A>
) 并向前声明 A
。如果 "is-a" 关系适用,那么您将需要以某种方式打破循环依赖(同样,智能指针可以提供帮助)。
你没有提到cpp文件的用途或要求;使用 cpp 文件 (Z.cpp) 隔离调用 A
成员的代码,这样 header 要求就会降低。