This is probably a dumb question. I am trying to make a text-mud. I need each Room class to contain other Room classes that one can refer to when trying to move to them or get information from them. However, I can not do that because I obviously can not declare a class within its definition. So, how do I do this? Here's what I mean when I state I can not do it:
class Room {
public:
Room NorthRoom;
Room EastRoom;
Room SouthRoom;
Room WestRoom;
};
It's not possible to have a Room
member variable. You could use a pointer or reference though.
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
I am sure not EVERY room has four children rooms, right? Otherwise the number of your rooms is infinity which is hard to handle in finite memory :-)
You might try
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Then you can have NULL pointers when a room doesn't have children.
Your Room
needs to have pointers to other Room
s (that is, Room*
s).
A class type object (like Room
) has a size that is at least large enough to contain all its member variables (so, if you add up the sizes of each of its member variables, you'll get the smallest size that the class can be.
If a class could contain member variables of its own type then its size would be infinite (each Room
contains four other Room
s, each of which contains four other Room
s, each of which contains...).
C++ doesn't have reference type objects like Java and C#.
You should use pointers:
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
Probably cause is that class does not yet its constructor, so when you use pointers you init them later, when class has construcotr definition.
来源:https://stackoverflow.com/questions/4004673/class-variable-within-its-definition