C++ 三个相互连接的对象C++;

C++ 三个相互连接的对象C++;,c++,oop,design-patterns,include,forward-declaration,C++,Oop,Design Patterns,Include,Forward Declaration,我有三个类,类Actor,类Cell和类Behavior。类Actor实例化行为的子类(在行为头文件中定义)。行为使用方法分析指向参与者的指针向量和指向单元格的指针向量。单元格具有分析指向单元格的指针向量的方法,并且它们包含指向参与者的指针向量。哦,是的,在Actor头文件中有一个枚举标题数据类型,所有类都以某种方式使用它。(通过在包含Actor的每个文件中声明extern enum Heading数据类型合并) 我已经得到了大部分代码,但是当我得到一个与包含和递归包含相关的大量错误列表时,我遇

我有三个类,类Actor,类Cell和类Behavior。类Actor实例化行为的子类(在行为头文件中定义)。行为使用方法分析指向参与者的指针向量和指向单元格的指针向量。单元格具有分析指向单元格的指针向量的方法,并且它们包含指向参与者的指针向量。哦,是的,在Actor头文件中有一个枚举标题数据类型,所有类都以某种方式使用它。(通过在包含Actor的每个文件中声明extern enum 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. 
我看到的唯一一个与include相关的错误是Actor.h文件中Move的一个实例的类型不完整


编辑#2:在actor.cpp中添加了行为和移动的包含,并将它们从actor.h中删除,并将我的实例化转换为创建指针,它对我咳嗽和咆哮,但构建成功。谢谢你们的帮助,伙计们

只要唯一的依赖项是指针,就使用前向decl。根据该规则,include仅用于actor.h包含behavior.h和heading.h

behavior.h->声明单元格和参与者
Cells.h->declare actors

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

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

Cells.cpp->include actors.h

为了减少复杂性,将标题移动到它自己的标题。当然,要用防护罩保护它。然后,在
单元格
等中使用
参与者
行为
的正向声明。

什么类型的错误?您能给我们看一下您的类吗?您也可以转发声明枚举!不幸的是,我不能。我可以告诉您要点,我的应用程序将形成一个单元格对象的世界,而单元格对象又包含参与者对象的向量和指向其邻居的指针的向量(利用标题和其他单元格)。Actor对象使用Behavior对象创建一个Move对象,将其自身从一个单元格传输到另一个单元格。我喜欢你的解决方案,这很有意义,但我的编译器不会买它。获取“在my Cell.cpp实现文件中使用未定义的类型'Actor',以及”请参阅'Actor'的声明“在我的cell.h文件中。我从这些开始……这是一个很长的错误列表。你需要在cppsI中包含标题。在我的cell.cpp中包含标题。在我的actor.h中包含标题。cppI更新了我的原始帖子,介绍了我如何使用你的答案,以及我得到的结果。我更新了我的原始帖子,介绍了我如何使用你的答案,以及我得到的结果。