Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类变量在其定义中?_C++_Class_Variables_Scope_Mud - Fatal编程技术网

C++ 类变量在其定义中?

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; }; 不可能有

这可能是个愚蠢的问题。我正试着把文字弄成泥。我需要每个Room类包含其他Room类,在尝试移动到它们或从它们获取信息时可以引用这些Room类。然而,我不能这样做,因为我显然不能在其定义内声明类。那么,我该怎么做呢?当我说我做不到时,我的意思是:

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++中更简单。