【问题标题】:Class variable within its definition?定义中的类变量?
【发布时间】:2011-04-29 14:44:00
【问题描述】:

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

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

【问题讨论】:

  • 感谢您的回答。我忘了指针。在被高级语言的奢华懒惰所宠坏之后,它们对我来说是一个新概念。
  • 如果您是 C++ 新手,您可能希望获得 a good introductory book,即使您有其他语言的经验。除了下面的答案,看看“智能指针”(您可以在 Stack Overflow 或 Google 上搜索),它使 C++ 中的内存管理更简单。

标签: c++ class variables scope mud


【解决方案1】:

不可能有Room 成员变量。不过,您可以使用指针或引用。

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

【讨论】:

  • 这比不完整的课程更重要。如果可能的话,生成的类将是无限大的!
  • @Oli:是的。我在帖子提交后立即删除了它,因为我意识到这不是原因。
【解决方案2】:

我确定不是每个房间都有四个儿童房,对吧?否则你的房间数量是无限的,在有限的内存中很难处理:-)

你可以试试

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

然后,当房间没有孩子时,您可以使用 NULL 指针。

【讨论】:

    【解决方案3】:

    您的Room 需要有指针指向其他Rooms(即Room*s)。

    类类型对象(如Room)的大小至少足以容纳其所有成员变量(因此,如果将其每个成员变量的大小相加,您将得到最小的类的大小。

    如果一个类可以包含它自己类型的成员变量,那么它的大小将是无限的(每个Room 包含四个其他Rooms,每个Rooms 包含另外四个Rooms,每个Rooms 包含.. .)。

    C++ 没有像 Java 和 C# 这样的引用类型对象。

    【讨论】:

      【解决方案4】:

      你应该使用指针:

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

      可能的原因是类还没有它的构造函数,所以当你使用指针时,你稍后会初始化它们,当类有构造函数定义时。

      【讨论】:

        猜你喜欢
        • 2014-12-16
        • 2018-06-23
        • 2012-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多