2010-10-23 6 views
3

C'est probablement une question stupide. J'essaye de faire une boue de texte. J'ai besoin que chaque classe Room contienne d'autres classes Room auxquelles on peut se référer en essayant de les déplacer ou d'obtenir des informations de leur part. Cependant, je ne peux pas faire cela parce que je ne peux évidemment pas déclarer une classe dans sa définition. Alors, comment je fais ça? Voici ce que je veux dire quand je dis que je ne peux pas le faire:Variable de classe dans sa définition?

class Room { 
    public: 
     Room NorthRoom; 
     Room EastRoom; 
     Room SouthRoom; 
     Room WestRoom; 
}; 
+0

Merci pour les réponses. J'ai oublié les pointeurs. Ils sont un nouveau concept pour moi après avoir été gâté par la paresse luxueuse des langues de haut niveau. – Reznor

+2

Si vous êtes nouveau en C++, vous pouvez obtenir [un bon livre d'introduction] (http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list), même si vous avoir de l'expérience avec d'autres langues. En plus des réponses ci-dessous, jetez un oeil aux "pointeurs intelligents" (vous pouvez rechercher ici sur Stack Overflow ou sur Google), ce qui rend la gestion de la mémoire dans C++ _far_ plus simple. –

Répondre

5

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

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

Il est plus fondamental que la classe n'est pas complète. Si c'était possible, la classe résultante serait de taille infinie! –

+0

@Oli: Oui. J'ai supprimé cela immédiatement après que le message a été soumis car j'ai réalisé que ce n'était pas la cause. – kennytm

1

Votre Room a besoin d'avoir pointeurs vers d'autresRoom s (c'est Room* s). Un objet de type classe (comme Room) a une taille au moins assez grande pour contenir toutes ses variables membres (donc, si vous additionnez les tailles de chacune de ses variables membres, vous obtiendrez la plus petite taille que 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 Room s, dont chacun contient quatre autres Room s, dont chacun contient. ..).

C++ ne possède pas d'objets de type référence tels que Java et C#

2

Je suis sûr que pas toutes les chambres ont quatre chambres d'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.

0

Vous devez utiliser des pointeurs:

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

Probablement cause 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.

Questions connexes