gpt4 book ai didi

c++ - 由于嵌套不能#include,不能使用类原型(prototype)

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:32 25 4
gpt4 key购买 nike

情况:我有一个 Particle 类和一个 Field 类。粒子有与之相关的场,反之亦然,场通常有粒子。

我不能#include "particle.hpp""field.hpp"如果我#include "field.hpp""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’

是否有解决这些问题的方法?我明白为什么会发生错误。如何在不将它们包含在彼此的文件中的情况下定义这两个类?这些问题的出现是因为场试图访问粒子的成员,而粒子包含一个场 vector 。

编辑:一种解决方法是将这些类合并到一个文件中的一个类中……但这很荒谬,会导致各种其他问题。

EDIT2:我知道头球后卫。

最佳答案

我会让 field.hpp 包含 particle.hpp,在 particle.hpp 中包含 ElementaryField 的前向声明 - 然后在 particle.cpp 中包含 field.hpp。这应该可以解决您的问题,只要您在 particle.hpp 中没有任何代码。从技术上讲,您可以在 .hpp 中对每个进行前向声明,然后在 .cpp 中包含另一个的 .hpp。这可能会更好,因为它更加标准化。我接受了我的初步评估,因为你说场访问粒子的成员,而粒子只包含场的 vector 。

此外,如果您不使用 pragma #once ,也许会有帮助?

关于c++ - 由于嵌套不能#include,不能使用类原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com