像 Java 和 C# 一样,我可以在同一个类中创建一个类的对象吗?
/* State.h */
class State{
private:
/*...*/
State PrevState;
};
错误:
field 'PrevState' has incomplete type
最佳答案
你不能按照写的去做。当您直接在类中将变量声明为某种类型时 (Type variablename
),用于变量分配的内存将成为其父类型分配的一部分。知道了这一点,您就可以清楚为什么不能这样做了:分配将递归扩展——PrevState
需要为 it's PrevState
分配空间> 成员(member),等等永远。此外,即使可以通过这种方式分配无限量的内存,构造函数调用也会无限递归。
但是,您可以定义一个变量,该变量是指向包含类型的引用或指针,State &
或 State *
(或某些智能指针类型),因为这些类型的大小是固定的(引用通常是指针大小的,指针将是 4 或 8 字节,具体取决于您的体系结构)。
关于在同一个类中创建一个类的对象时出现 C++ 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11642058/