variable de clase dentro de su definición?
Pregunta
Esta es probablemente una pregunta tonta. Estoy tratando de hacer un texto-barro. Necesito cada clase de habitaciones para contener otros tipos de habitaciones que se puede hacer referencia a cuando se trata de mover a ellos u obtener información de ellos. Sin embargo, no puedo hacer eso porque, obviamente, no puedo declarar una clase dentro de su definición. Así que, ¿cómo puedo hacer esto? Esto es lo que quiero decir cuando digo que no puedo hacerlo:
class Room {
public:
Room NorthRoom;
Room EastRoom;
Room SouthRoom;
Room WestRoom;
};
Solución
No es posible tener una variable miembro Room
. Se puede usar un puntero o una referencia sin embargo.
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Otros consejos
Estoy seguro de que no tiene habitación cada cuatro niños habitaciones, ¿verdad? De lo contrario, el número de sus habitaciones es infinito, que es difícil de manejar en la memoria finita: -)
Usted puede tratar
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
A continuación, puede tener punteros NULL cuando una habitación no tiene hijos.
Sus necesidades Room
tener punteros a otros Room
s (es decir, Room*
s).
Un objeto de tipo de clase (como Room
) tiene un tamaño que es al menos lo suficientemente grande como para contener todas sus variables miembro (por lo que, si se suman los tamaños de cada una de sus variables miembro, podrás obtener el tamaño más pequeño que la clase puede ser.
Si una clase podría contener variables de miembros de su propio tipo, entonces su tamaño sería infinita (cada uno contiene Room
otros cuatro Room
s, cada uno de los cuales contiene otros cuatro Room
s, cada una de las cuales contiene ...).
C ++ no tiene objetos de tipo de referencia como Java y C #.
Se debe utilizar punteros:
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Es probable que la causa es que clase no todavía su constructor, por lo que cuando se utiliza punteros que les init más tarde, cuando la clase tiene construcotr definición.