在同一个类中创建一个类的对象时出现 C++ 错误?

标签 c++

像 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/

相关文章:

c++ - 只有 header 的 C++ 应用程序有什么问题?

c++ - 包含字符串的类 - 我可以跳过初始化它们吗?如果可以的话,如何?

c++ - gluUnproject 返回 0,似乎与 modelview 矩阵有关

c++ - 阻塞直到 boost::signal 被调用

c++ - 如何使用 MPIR 库计算 GCD

c++ - Visual C++ 中的外部模板是否存在错误?

c# - 将指向 C# 结构的指针发送到 C++ DLL

c++ - 迭代器如何在以下程序中工作

c++ - 如果在成员中抛出异常,则删除母对象

c++ - Qt SQL 线程数据库查询