Question

Ceci est probablement une question stupide. Je suis en train de faire un texte de boue. J'ai besoin chaque classe de chambre pour contenir d'autres classes de la chambre que l'on peut se référer à en essayant de déplacer les informations ou obtenir d'eux. Cependant, je ne peux pas le faire parce que je ne peux évidemment pas déclarer une classe dans sa définition. Alors, comment dois-je faire cela? Voici ce que je veux dire quand je dis que je ne peux pas le faire:

class Room {
    public:
        Room NorthRoom;
        Room EastRoom;
        Room SouthRoom;
        Room WestRoom;
};
Était-ce utile?

La solution

Il est impossible d'avoir une variable membre Room. Vous pouvez utiliser un pointeur ou une référence bien.

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

Autres conseils

Je suis sûr de ne pas Chaque chambre dispose de quatre chambres enfants, non? Sinon, le nombre de vos chambres est l'infini qui est difficile à gérer en mémoire finie: -)

Vous pouvez essayer

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

Ensuite, vous pouvez avoir des pointeurs NULL lorsqu'une chambre ne dispose pas d'enfants.

Votre Room doit avoir pointeurs à d'autres Rooms (c'est Room*s).

Un objet de type de classe (comme Room) a une taille qui est au moins assez grand pour contenir toutes ses variables membres (donc, si vous ajoutez les tailles de chacune de ses variables membres, vous obtiendrez la plus petite taille la classe peut être.

Si une classe peut contenir des variables membres de son propre type alors sa taille serait infinie (chaque Room contient quatre autres Rooms, dont chacun contient quatre autres Rooms, dont chacune contient ...).

C ++ n'a pas des objets de type référence comme Java et C #.

Vous devez utiliser des pointeurs:

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

Probablement faire est que la classe n'a pas encore son constructeur, donc quand vous utilisez des pointeurs vous les initialiser plus tard, quand la classe a définition construcotr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top