私は現在RPGゲームを作ろうとしており、何か問題があります。これはこれまで私が持っていたレイアウトです。私のプログラムにインクルードレイアウトを設定するにはどうすればよいですか?
クラス:
- 俳優 - 何のための基本クラス
- などのユニット、発射、とユニット「存在する」ということ - 継承俳優、すべてのユニットの基礎を。
- ゲーム - ゲームには1つのインスタンスしかなく、ゲーム内のすべてのオブジェクトへのポインタが含まれます。私はそれを0.1秒ごとにすべてのアクターで仮想関数gameTickと呼ぶようにする予定です。
問題は、すべてのアクタにゲームインスタンスへのポインタを持たせたいということです。私が500の半径の領域のダメージを与える呪文を持っていたければ、Gameにその範囲内のすべてのユニットポインタを見つけて返してほしい。
私の問題は、私のプログラムがコンパイルされないActorのヘッダーファイルにGameを含める場合です。私の俳優にゲームを利用させるにはどうすればいいですか?それとも私はこれについて間違った方法をとっていますか?
ありがとうございます。
// START main.cpp
#include <iostream>
#include "game.h"
int main()
{
std::cout << "All done\n";
return 0;
}
// END main.cpp
// START actor.h
#ifndef __ACTOR_H_
#define __ACTOR_H_
#include <iostream>
//#include "game.h" Causes many errors if uncommented
class Actor
{
public:
Actor();
std::string name_;
};
#endif
// END actor.h
// START actor.cpp
#include "actor.h"
Actor::Actor()
{
name_ = "Actor class";
}
// END actor.cpp
// START unit.h
#ifndef __UNIT_H_
#define __UNIT_H_
#include "actor.h"
class Unit : public Actor
{
public:
Unit();
};
#endif
// END unit.h
// START unit.cpp
#include "unit.h"
Unit::Unit()
{
name_ = "Unit class";
}
// END unit.cpp
// START game.h
#ifndef __GAME_H_
#define __GAME_H_
#include <vector>
#include "unit.h"
class Game
{
public:
std::vector< Actor * > actors_;
std::vector< Unit * > units_;
};
#endif
// END game.h
依存関係の問題を修正するためにいくつかのことをインターフェイスに分割することについて考えてみましょう。私は、あなたが循環依存と関係していたエラーを仮定します。 –
unit.hにはactor.h、actor.hにはgame.h、game.hにはunit.h / – Dan