C ++不完整类型是不允许类内部使用的?

时间:2014-05-20 03:28:08

标签: c++ class types nested

我的标题Room.h定义如下:

#ifndef ROOM_H
#define ROOM_H

class Room
{
public:
    Room();

private:
    Room north;
    Room south;
    Room east; 
    Room west;
};

#endif

但我为每个Error: incomplete type is not allowed变量得到Room。这种设计有根本​​缺陷吗?

3 个答案:

答案 0 :(得分:6)

是的,设计存在致命缺陷。你说每个房间还有四个房间。然后,每个房间将包含四个房间 - 以及另外四个房间中的每个房间,等等无限期。简而言之,从单个房间开始,包含无限的其他房间。

您可以创建一个包含指向其他四个房间的指针的房间。然后你可以为那些连接的人创建空间,但是(重要的是)当你到达一个链的末尾时,你可以创建一个房间,在没有房间的方向上有空指针。

答案 1 :(得分:5)

简答

使用指针。

private:
Room* north;
...

长答案

C ++编译器需要知道Class的大小。 Error: incomplete type is not allowed,因为无法计算大小。

使用指针。因为编译器可以计算pointer的大小。

PS:我不擅长英语

答案 2 :(得分:1)

在完全定义它之前使用Room类型(根据定义,编译器推导出创建对象所需的size),并且因为它是相同的类型包容性,将导致无限的定义。您可以添加指针或引用Room而不是对象。

class Room
{
  public:
    Room();

  private:
   Room* north;
   Room* south;
   Room* east; 
   Room* west;
};