A variável de classe dentro de sua definição?
Pergunta
Esta é provavelmente uma pergunta idiota.Eu estou tentando fazer um texto-lama.Eu preciso de cada Sala de aula para conter outra Sala de classes que pode-se referir ao tentar mover-se para eles ou obter informações a partir deles.No entanto, eu não posso fazer isso, porque eu, obviamente, não pode declarar uma classe dentro de sua definição.Então, como posso fazer isso?Aqui está o que eu quero dizer quando afirmo que eu não posso fazê-lo:
class Room {
public:
Room NorthRoom;
Room EastRoom;
Room SouthRoom;
Room WestRoom;
};
Solução
Não é possível ter um Room
variável de membro. Você pode usar um ponteiro ou referência.
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Outras dicas
Tenho certeza de que nem todos os quartos têm quatro quartos infantis, certo? Caso contrário, o número de seus quartos é o infinito, que é difícil de manusear na memória finita :-)
Você pode tentar
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Então você pode ter dicas nulas quando um quarto não tem filhos.
O seu Room
precisa ter ponteiros para outros Room
s (que é, Room*
s).
Uma classe do tipo de objeto (como Room
) tem um tamanho que é, no mínimo, grande o suficiente para conter todas as suas variáveis de membro (por isso, se você somar os tamanhos de cada uma das suas variáveis de membro, você vai ter o menor tamanho que a classe pode ser.
Se uma classe pode conter variáveis de membros de seu próprio tipo, em seguida, seu tamanho seria infinito (cada Room
contém quatro outros Room
s, cada um dos quais contém quatro outros Room
s, cada um dos quais contém...).
C++ não tem tipo de referência de objetos, como Java e C#.
Você deve usar ponteiros:
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Provavelmente porque a classe ainda não é seu construtor; portanto, quando você usa ponteiros, você os inicia mais tarde, quando a classe tem a definição de construção.