三个互连对象C ++

时间:2012-11-08 09:25:07

标签: c++ oop design-patterns include forward-declaration

我有三个类,类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中删除,并将我的实例化转换为指针的创建,并且它在我身上咳嗽和咆哮,但它成功构建。谢谢你的帮助!

2 个答案:

答案 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等中使用BehaviorCells的前向声明。