0

我有三个类,Actor 类、Cell 类和 Behavior 类。类 Actor 实例化 Behavior 的子类(在 Behavior 头文件中定义)。行为使用方法来分析指向 Actors 的指针向量和指向 Cells 的指针向量。Cell 具有分析指向 Cell 的指针向量的方法,并且它们包含指向 Actor 的指针向量。哦,是的,在 Actor 头文件中,所有类都以某种方式使用了枚举的 Heading 数据类型。(通过在包含 Actor 的每个文件中声明外部枚举 Heading 数据类型来合并)。

我有大部分代码,但是当我得到与包含和递归包含相关的大量错误列表时遇到了一个症结,并且一直在努力研究几个小时。我可以使用一些帮助来找出排列这些对象以使它们一起工作的最佳方法。

因此,重新迭代:

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 中删除,并将我的实例化转变为创建指针,它对我咳嗽​​和咆哮,但它成功构建。谢谢你们的帮助!

4

2 回答 2

1

只要唯一的依赖是指针,只需使用前向 decl。使用该规则,仅包含让 actor.h 包含 behavior.h 和 heading.h

behavior.h -> 声明单元和演员
Cells.h -> 声明演员

行为和单元 cpp 必须包含前向声明类的头文件。

behavior.cpp -> 包含 Cells.h 和 Actors.h
Cells.cpp -> 包含 actor.h

于 2012-11-08T09:28:13.267 回答
0

为了减轻复杂性,将标题移动到它自己的标题。当然,通过包含防护来保护它。然后,使用Actorand BehaviorinCells等的前向声明。

于 2012-11-08T09:28:32.897 回答