Переменная класса в его определении?
Это, наверное, тупой вопрос. Я пытаюсь сделать текстовую грязь. Мне нужно, чтобы каждый класс комнаты содержал другие классы комнаты, на которые можно ссылаться при попытке перейти к ним или получить от них информацию. Однако я не могу этого сделать, потому что, очевидно, я не могу объявить класс в его определении. Итак, как мне это сделать? Вот что я имею в виду, когда заявляю, что не могу этого сделать:
class Room {
public:
Room NorthRoom;
Room EastRoom;
Room SouthRoom;
Room WestRoom;
};
4 ответа
Не возможно иметь Room
переменная-член. Вы можете использовать указатель или ссылку, хотя.
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Я уверен, что в КАЖДОЙ комнате нет четырех детских комнат, верно? В противном случае количество ваших комнат будет бесконечным, с которым трудно справиться в конечной памяти:-)
Вы можете попробовать
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Тогда вы можете иметь нулевые указатели, когда в комнате нет детей.
Ваш Room
должен иметь указатели на других Room
s (то есть Room*
с).
Объект типа класса (например, Room
) имеет размер, по крайней мере достаточно большой, чтобы содержать все его переменные-члены (поэтому, если вы сложите размеры каждой из его переменных-членов, вы получите наименьший размер, который может быть у класса.
Если бы класс мог содержать переменные-члены своего собственного типа, то его размер был бы бесконечным (каждый Room
содержит четыре других Room
с, каждый из которых содержит четыре других Room
с, каждый из которых содержит...).
C++ не имеет объектов ссылочного типа, таких как Java и C#.
Вы должны использовать указатели:
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Возможно, причина в том, что класс еще не имеет своего конструктора, поэтому, когда вы используете указатели, вы инициируете их позже, когда у класса есть определение construcotr.