【发布时间】:2013-02-27 17:28:28
【问题描述】:
情况:我有一个 Particle 类和一个 Field 类。粒子具有与之关联的场,反之亦然,场通常具有粒子。
如果我在"particle.hpp" 中#include "field.hpp",我不能在"field.hpp" 中#include "particle.hpp"。当然,这很有道理。
我在这两个文件中都使用了前向声明,但是编译器现在无法编译并出现以下错误:
error: invalid use of incomplete type ‘class ElementaryParticle’
error: forward declaration of ‘class ElementaryParticle’
error: invalid use of incomplete type ‘class ElementaryField’
error: forward declaration of ‘class ElementaryField’
有没有办法解决这些问题?我明白为什么会发生错误。如何定义两个类而不将它们包含在彼此的文件中?这些问题的出现是因为场试图访问粒子的成员,而粒子包含场向量。
编辑:一种解决方法是将这些类合并到一个文件中的一个类中......但这很荒谬并导致各种其他问题。
EDIT2:我知道头卫。
【问题讨论】:
-
在
field中包含particle,在particle中包含field,但是用header guards 包围两个标题?我对你的问题有点困惑,但我认为这就是你想要的。 -
"在每个标头中包含另一个标头" - 这是问题的确切原因。
-
你可以用头部保护来做到这一点。
-
@JesusPlusPlus Scott 解释了解决方案。