C++ 三个相互连接的对象C++;
我有三个类,类Actor,类Cell和类Behavior。类Actor实例化行为的子类(在行为头文件中定义)。行为使用方法分析指向参与者的指针向量和指向单元格的指针向量。单元格具有分析指向单元格的指针向量的方法,并且它们包含指向参与者的指针向量。哦,是的,在Actor头文件中有一个枚举标题数据类型,所有类都以某种方式使用它。(通过在包含Actor的每个文件中声明extern enum Heading数据类型合并) 我已经得到了大部分代码,但是当我得到一个与包含和递归包含相关的大量错误列表时,我遇到了一个关键点,并且已经为此付出了数小时的努力。我需要一些帮助来找出排列这些对象的最佳方式,以便它们一起工作 因此,要重新迭代: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: 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更新了我的原始帖子,介绍了我如何使用你的答案,以及我得到的结果。我更新了我的原始帖子,介绍了我如何使用你的答案,以及我得到的结果。