3

これはおそらくばかげた質問です。私はテキスト泥を作ろうとしています。各Roomクラスには、移動したり情報を取得したりするときに参照できる他のRoomクラスが含まれている必要があります。しかし、私は明らかにその定義内でクラスを宣言できないため、それを行うことはできません。だから、どうすればこれを行うことができますか?これが私がそれをすることができないと言うとき私が意味することです:

class Room {
    public:
        Room NorthRoom;
        Room EastRoom;
        Room SouthRoom;
        Room WestRoom;
};
4

4 に答える 4

5

Roomメンバー変数を持つことはできません。ただし、ポインタまたは参照を使用できます。

class Room {
    public:
        Room* NorthRoom;
        Room* EastRoom;
        Room* SouthRoom;
        Room* WestRoom;
};
于 2010-10-23T15:24:06.267 に答える
2

すべての部屋に4つの子供部屋があるわけではありませんよね?そうでなければ、あなたの部屋の数は無限であり、有限のメモリで処理するのは難しいです:-)

あなたは試すかもしれません

class Room {
    public:
        Room* NorthRoom;
        Room* EastRoom;
        Room* SouthRoom;
        Room* WestRoom;
};

次に、部屋に子がない場合にNULLポインターを使用できます。

于 2010-10-23T15:25:27.033 に答える
1

他のs(つまり、 s)へのポインタRoomが必要ですRoomRoom*

クラス型オブジェクト(のようなRoom)のサイズは、少なくともそのすべてのメンバー変数を含むのに十分な大きさです(したがって、その各メンバー変数のサイズを合計すると、クラスが可能な最小サイズになります。

クラスに独自のタイプのメンバー変数を含めることができる場合、そのサイズは無限になります(それぞれRoomに他の4つRoomのが含まれ、それぞれに他の4つのが含まれRoom、それぞれに...が含まれます)。

C ++には、JavaやC#のような参照型オブジェクトはありません。

于 2010-10-23T15:24:13.573 に答える
0

ポインタを使用する必要があります。

class Room {
    public:
        Room* NorthRoom;
        Room* EastRoom;
        Room* SouthRoom;
        Room* WestRoom;
};

おそらく原因は、クラスがまだコンストラクターになっていないことです。したがって、ポインターを使用するときは、後でクラスにコンストラクター定義があるときにポインターを初期化します。

于 2010-10-23T15:26:23.837 に答える