c++不完全类型不允许在类内部使用
C++ incomplete type is not allowed class inner use?
我有一个标题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;
};
相关文章:
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 自制的上衣:看起来一样,但不完全相同
- STRCMP内部IF在内部不起作用
- 我不完全确定此代码的行为.有人可以向我解释一下吗?
- C++:在"try"外部创建的类型会导致错误,但在内部不会
- 系统包括在分布之间不完全一致
- 我不完全确定这个大O的复杂性
- 两个不完全相同的函数指针是否兼容
- 气泡排序不完全有效
- 作用域在两个类实现之间不完全独立
- C++单例 — 不完全C++ 11 标准
- 不完全理解这部分代码
- BOOST_STRONG_TYPEDEF几乎但不完全像它的基础
- 为什么对于某些数组A,sizeof(A)在函数内部不起作用
- 提升async_read_some不完全异步
- glDrawPixels输出一些像素,其RGB值不完全达到预期
- 交换两个阵列而不完全分配第三个 (C++)
- C++ std::迭代器,内部不使用 std::vector 或 std::list
- 添加和删除文件片段以不完全重写它的最有效方法是什么
- c++不完全类型不允许在类内部使用