0

クラス Actor、クラス Cell、およびクラス Behavior の 3 つのクラスがあります。Class Actor は、Behavior のサブクラス (Behavior ヘッダー ファイルで定義) をインスタンス化します。動作はメソッドを使用して、アクタへのポインタのベクトルとセルへのポインタのベクトルを分析します。セルには、セルへのポインタのベクトルを分析するメソッドがあり、アクタへのポインタのベクトルが含まれています。そうそう、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. 

私が見ている唯一のインクルード関連のエラーは、Actor.h ファイル内の Move の 1 つのインスタンス化に不完全な型があることです。

編集#2:actor.cppにBehaviorとMoveのインクルードを追加し、actor.hから削除し、インスタンス化をポインターの作成に変えました。咳をしてうなり声を上げましたが、正常にビルドされました。助けてくれてありがとう!

4

2 に答える 2

1

唯一の依存関係がポインターである限り、前方宣言を使用してください。そのルールでは、actor.hにbehavior.hとheading.hを含めるだけです。

Behavior.h- >セルとアクター
の宣言Cells.h->アクターの宣言

動作とセルcppには、前方宣言されたクラスのヘッダーファイルを含める必要があります。

Behavior.cpp->インクルードCells.hおよびActors.hCells.cpp-
>インクルードactors.h

于 2012-11-08T09:28:13.267 に答える
0

複雑さを軽減するには、Headingを独自のヘッダーに移動します。もちろん、インクルードガードで保護してください。次に、andinなどの前方宣言を使用しActorますBehaviorCells

于 2012-11-08T09:28:32.897 に答える