Переменная класса в его определении?

Это, наверное, тупой вопрос. Я пытаюсь сделать текстовую грязь. Мне нужно, чтобы каждый класс комнаты содержал другие классы комнаты, на которые можно ссылаться при попытке перейти к ним или получить от них информацию. Однако я не могу этого сделать, потому что, очевидно, я не могу объявить класс в его определении. Итак, как мне это сделать? Вот что я имею в виду, когда заявляю, что не могу этого сделать:

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 должен иметь указатели на других Rooms (то есть Room*с).

Объект типа класса (например, Room) имеет размер, по крайней мере достаточно большой, чтобы содержать все его переменные-члены (поэтому, если вы сложите размеры каждой из его переменных-членов, вы получите наименьший размер, который может быть у класса.

Если бы класс мог содержать переменные-члены своего собственного типа, то его размер был бы бесконечным (каждый Room содержит четыре других Roomс, каждый из которых содержит четыре других Roomс, каждый из которых содержит...).

C++ не имеет объектов ссылочного типа, таких как Java и C#.

Вы должны использовать указатели:

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

Возможно, причина в том, что класс еще не имеет своего конструктора, поэтому, когда вы используете указатели, вы инициируете их позже, когда у класса есть определение construcotr.

Другие вопросы по тегам