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;
};
¿Fue útil?

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 Rooms (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 Rooms, cada uno de los cuales contiene otros cuatro Rooms, 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top