c++不完全类型不允许在类内部使用

C++ incomplete type is not allowed class inner use?

本文关键字:内部 不完全 类型 不允许 c++      更新时间:2023-10-16

我有一个标题Room.h定义如下:

#ifndef ROOM_H
#define ROOM_H
class Room
{
public:
    Room();
private:
    Room north;
    Room south;
    Room east; 
    Room west;
};
#endif

但是对于每个Room变量我得到Error: incomplete type is not allowed。这种设计是否存在根本缺陷?

是的,这个设计有致命的缺陷。你是说每个房间都包含另外四个房间。然后每一个都包含另外四个房间——这四个房间中的每一个都包含另外四个房间,以此类推。简而言之,最初的一个房间包含了无数个其他房间。

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

简短回答

使用指针。

private:
Room* north;
...

长回答

c++编译器需要知道类的大小。Error: incomplete type is not allowed,因为不能计算大小。

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

PS:我不擅长英语

您在完全定义它之前使用Room类型(从定义编译器推断创建对象所需的size),并且由于它是相同类型包含,将导致无限定义。您可以添加指向Room的指针或引用,而不是对象。

class Room
{
  public:
    Room();
  private:
   Room* north;
   Room* south;
   Room* east; 
   Room* west;
};