我有三个类,类Actor,类Cell和类Behavior。类Actor实例化Behavior的子类(在Behavior头文件中定义)。 Behavior使用方法分析指向Actors的指针向量和指向Cells的指针向量。单元格具有分析指向单元格的指针向量的方法,并且它们包含指向Actors的指针向量。哦,是的,在Actor头文件中,所有类都以某种方式使用了枚举的Heading数据类型。 (通过在包含Actor的每个文件中声明extern枚举标题数据类型而合并)。
我已经获得了大部分代码,但是当我得到一个与包含和递归包含相关的大量错误列表时,我遇到了一个棘手的问题,并且已经花了好几个小时。我可以使用一些帮助找出安排这些对象的最佳方法,以便它们一起工作。
所以,重新迭代:
Actor: Behavior
Behavior: vector of pointers to Cells, vector of pointers to Actors
Cells: vector of pinters to Cells, vector of pointers to Actors
Heading: Enumerated, declared extern in all classes, currently stored in Actor.
有关如何包含哪些头文件的建议?我尝试了许多不同前瞻性声明的排列,包括等等。老实说我不知道现在去哪里。
谢谢!
编辑:更新了我的类和头文件。
Actor: Move, Heading
Move: Behavior Heading
Behavior: Cell, Actor Heading
Cell: Cell, Actor Heading
Heading: Used by all.
目前看,这里包含了什么:
Behavior.h: Forward declarations of Cell and Actor
Behavior.cpp: Includes Behavior.h, Cell.h, Actor.h
Cell.h: Forward Declaration of Actor
Cell.cpp: includes Cell.h, Heading.h, Actor.h
Actor.h: Includes Behavior.h, Heading.h.
Actor.cpp: includes actor.h
Move.h: Includes Behavior.h, Heading.h
Move.cpp: Includes move.h, Heading.h, Cell.h, Actor.h
Heading: Includes nothing, declares nothing.
我看到的唯一与包含相关的错误是Actor.h文件中Move的一个实例化具有不完整的类型。
编辑#2:在actor.cpp中添加了Behavior和Move的包含,并将它们从actor.h中删除,并将我的实例化转换为指针的创建,并且它在我身上咳嗽和咆哮,但它成功构建。谢谢你的帮助!
答案 0 :(得分:1)
只要唯一的依赖项是指针,只需使用forward decl即可。根据该规则,只有contains.h包含behavior.h和heading.h
behavior.h - >宣告细胞和演员
Cells.h - >宣告演员
行为和单元格cpp必须包含前向声明的类的头文件。
behavior.cpp - >包括Cells.h和Actors.h Cells.cpp - >包括actors.h
答案 1 :(得分:0)
为了减轻并发症,将标题移动到自己的标题。当然,由包括护卫保护它。然后,在Actor
等中使用Behavior
和Cells
的前向声明。