Frage

Dies ist wahrscheinlich eine dumme Frage. Ich versuche, einen Text-Schlamm zu machen. Ich brauche jedes Zimmer Klasse andere Zimmerklassen enthalten, dass man sich beziehen können, wenn sie versuchen, um sie zu bewegen oder Informationen von ihnen zu bekommen. Allerdings kann ich das nicht tun, weil ich kann natürlich nicht eine Klasse in seiner Definition erklären. Also, wie kann ich das tun? Hier ist, was ich meine, wenn ich sage, ich kann es nicht tun:

class Room {
    public:
        Room NorthRoom;
        Room EastRoom;
        Room SouthRoom;
        Room WestRoom;
};
War es hilfreich?

Lösung

Es ist nicht möglich, eine Room Membervariable zu haben. Sie könnten einen Zeiger oder eine Referenz obwohl verwenden.

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

Andere Tipps

Ich bin sicher, dass nicht jedes Zimmer hat vier Kinder Zimmer, nicht wahr? Ansonsten ist die Anzahl Ihrer Räume ist unendlich, die in endlichen Speichern zu handhaben hart ist: -)

Sie könnten versuchen,

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

Dann können Sie NULL-Zeiger haben, wenn ein Raum Kinder nicht haben.

Ihre Room Bedürfnisse haben Zeiger auf andere Rooms (das heißt, Room*s).

Ein Klassentyp Objekt (wie Room) eine Größe hat, die zumindest groß genug ist, alle seine Mitglieder Variablen enthält (so, wenn Sie die Größe jedes seiner Elementvariablen addieren, werden Sie die kleinste Größe erhalten, dass die Klasse kann sein.

Wenn eine Klasse könnte Membervariablen der eigenen Art enthalten dann würde seine Größe unendlich sein (jeweils Room enthält vier weitere Rooms, von denen jeder vier andere Rooms enthält, von denen jeder ...).

C ++ nicht Referenzart Objekte wie Java und C # hat.

Sie sollten Zeiger verwenden:

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

Wahrscheinlich Ursache ist, dass die Klasse nicht noch den Konstruktor, so dass, wenn Sie Zeiger verwenden Sie sie init später, als Klasse construcotr Definition hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top