ページ 11

クラスの相互定義について

Posted: 2009年11月15日(日) 00:25
by ジャーニー
はじめてですがよろしくお願いします。

現在C++でゲームを作っているところなのですが最近までC#を使っていたので勝手が全くわからなくなってしまいました。
わからないところは以下のようになっています。
以下のファイルはヘッダファイルの切り抜きです
class Character
{
private:
  Player *player;
public:
};

class Player
{
private:
  Player *enemy_player;
  std::vector<Character> character;
public:
};
上のプログラムは問題の部分だけを切り抜いたところになっています
Playerクラスはプレイヤ情報を持つクラスで相手のプレイヤ情報のアドレスを持ちます
また自身のもつキャラクタ(不定数となるのでvectorを使っています)の配列を持ちます

Characterクラスはキャラクタ情報を管理します
親となるプレイヤクラスのアドレスを所持します

このときキャラクタクラスはPlayerクラスの宣言前に行っているのでエラーが出てしまいます
またPlayerクラスとキャラクタクラスを逆にすると今度はプレイヤクラスの中のキャラクタクラスのvectorでエラーがでてしまいます
この2つを問題なく宣言するにはどうすればいいでしょうか
あと最近までC#でやってたのでアドレス関係もあっているかわからないです

C++は久々で質問としてちんぷんかんぷんなことを書いているかもしれませんがよろしくお願いします

Re:クラスの相互定義について

Posted: 2009年11月15日(日) 00:33
by たかぎ
Characterのクラス定義の前に、

class Player;

と書いてください。

Re:クラスの相互定義について

Posted: 2009年11月15日(日) 00:48
by ジャーニー
できました!ありがとございます
ちょっとまだアドレス関係のエラーはありますがなんとかしてみます
ちなみにこれはクラス名だけとりあえず定義しておいて後から中身を追加したという解釈で大丈夫でしょうか?

Re:クラスの相互定義について

Posted: 2009年11月15日(日) 00:50
by たかぎ
> ちなみにこれはクラス名だけとりあえず定義しておいて後から中身を追加したという解釈で大丈夫でしょうか?

まあ、そんなところです。
クラス名だけ宣言しておけば、そのクラスへのポインタや参照なら使えます。

Re:クラスの相互定義について

Posted: 2009年11月15日(日) 00:59
by ジャーニー
たかぎさんありがとうございます
また困ったことがありましたらよろしくお願いします