Вопрос

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

class Room {
    public:
        Room NorthRoom;
        Room EastRoom;
        Room SouthRoom;
        Room WestRoom;
};
Это было полезно?

Решение

Невозможно иметь 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*s).

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top