C++ 类变量在其定义中?
这可能是个愚蠢的问题。我正试着把文字弄成泥。我需要每个Room类包含其他Room类,在尝试移动到它们或从它们获取信息时可以引用这些Room类。然而,我不能这样做,因为我显然不能在其定义内声明类。那么,我该怎么做呢?当我说我做不到时,我的意思是:C++ 类变量在其定义中?,c++,class,variables,scope,mud,C++,Class,Variables,Scope,Mud,这可能是个愚蠢的问题。我正试着把文字弄成泥。我需要每个Room类包含其他Room类,在尝试移动到它们或从它们获取信息时可以引用这些Room类。然而,我不能这样做,因为我显然不能在其定义内声明类。那么,我该怎么做呢?当我说我做不到时,我的意思是: class Room { public: Room NorthRoom; Room EastRoom; Room SouthRoom; Room WestRoom; }; 不可能有
class Room {
public:
Room NorthRoom;
Room EastRoom;
Room SouthRoom;
Room WestRoom;
};
不可能有
Room
成员变量。不过,您可以使用指针或引用
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
您的
Room
需要有指向其他Room
s(即Room*
s)的指针
类类型对象(如Room
)的大小至少足以包含其所有成员变量(因此,如果将其每个成员变量的大小相加,将得到该类可以达到的最小大小)
如果一个类可以包含自己类型的成员变量,那么它的大小将是无限的(每个Room
包含四个其他Room
s,每个包含四个其他Room
s,每个包含…)
C++没有像Java和C#这样的引用类型对象。我肯定不是每个房间都有四个子房间,对吗?否则房间的数量是无限的,这在有限的内存中很难处理:-) 你可以试试
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
当房间没有孩子时,您可以使用空指针。您应该使用指针:
class Room {
public:
Room* NorthRoom;
Room* EastRoom;
Room* SouthRoom;
Room* WestRoom;
};
可能是因为类还没有构造函数,所以当你使用指针时,你会在类有构造函数定义时初始化它们。这比类不完整更重要。如果可能的话,生成的类将是无限大的@奥利:是的。我在帖子提交后立即删除了它,因为我意识到这不是原因。谢谢你的回答。我忘了指针。这是一个新概念,在我被高级语言的奢侈惰性所破坏之后。如果你是C++新手,你可能想得到,即使你有其他语言的经验。除了下面的答案,看看“智能指针”(你可以在这里搜索堆栈溢出或谷歌),这使得内存管理在C++中更简单。