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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジャーニー

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

#1

投稿記事 by ジャーニー » 15年前

はじめてですがよろしくお願いします。

現在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:クラスの相互定義について

#2

投稿記事 by たかぎ » 15年前

Characterのクラス定義の前に、

class Player;

と書いてください。

ジャーニー

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

#3

投稿記事 by ジャーニー » 15年前

できました!ありがとございます
ちょっとまだアドレス関係のエラーはありますがなんとかしてみます
ちなみにこれはクラス名だけとりあえず定義しておいて後から中身を追加したという解釈で大丈夫でしょうか?

たかぎ

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

#4

投稿記事 by たかぎ » 15年前

> ちなみにこれはクラス名だけとりあえず定義しておいて後から中身を追加したという解釈で大丈夫でしょうか?

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

ジャーニー

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

#5

投稿記事 by ジャーニー » 15年前

たかぎさんありがとうございます
また困ったことがありましたらよろしくお願いします

閉鎖

“C言語何でも質問掲示板” へ戻る