c++ - 在 A 类中引用 A 类的其他实例

标签 c++ class object header incomplete-type

我的标题中有这段(部分)代码

class Node
{
     Node prevNode;

     public:
     Node(float nodeXRotation, float nodeYRotation, 
         float nodeZRotation, float boneLength, float xOffset, 
         Node prevnode);
}

但它给了我以下错误:IntelliSense:不允许不完整的类型 (第 3 行:节点 prevNode;)

这是我初始化“节点”的地方

Node nodes[] = {    Node(0, 0, 0, 5, -14, NULL),     //Duimkootje 2
                Node(0, 0, 0, 5, -9, nodes[0]),  //Duimkootje 1
                    Node(0, 0, 0, 10, 0, nodes[1]), //DUIMHANDBOT



             Node(0, 25, 0, 10, 0), //WIJSVINGERHANDBOT
                Node(0, 25, 0, 8, -9, nodes[3]),  //Wijsvingerkootje 1
                Node(0, 25, 0, 7, -17, nodes[4]),  //Wijsvingerkootje 2
                 Node(0, 25, 0, 7, -24, nodes[5]),  //Wijsvingerkootje 3

             Node(0, 50, 0, 10, 0), //MIDDELVINGERHANDBOT
                 Node(0, 50, 0, 8, -9, nodes[7]), //Middelvingerkootje 1
                 Node(0, 50, 0, 8, -17, nodes[8]), //Middelvingerkootje 1
                 Node(0, 50, 0, 8, -24, nodes[9]), //Middelvingerkootje 1

             Node(0, 75, 0, 10, 0), //RINGVINGERHANDBOT
                 Node(0, 75, 0, 7, -9, nodes[11]), //Ringvingerkootje 1
                 Node(0, 75, 0, 8, -16, nodes[12]), //Ringvingerkootje 1
                 Node(0, 75, 0, 8, -24, nodes[13]), //Ringvingerkootje 1

             Node(0, 100, 0, 10, 0), //PINKHANDBOT
                 Node(0, 100, 0, 5, -9, nodes[15]), //Pinkkootje 1
                 Node(0, 100, 0, 5, -14, nodes[16]), //Pinkkootje 1
                 Node(0, 100, 0, 6, -19, nodes[17]), //Pinkkootje 1

我在这里做错了什么?

最佳答案

Mooing Duck 在评论中给出了答案。问题来了,因为当你试图定义一个节点时,你还没有完全定义一个节点。这意味着编译器无法确定要分配多少内存。

解决方案是让 prevNode 成为 Node*,因为这样你就可以声明一些已知大小的东西。

有趣的是,如果您是从 Java 转到 C++,您可以在 java 中避开这个问题。这是因为在 Java 中任何像这样的声明总是一个对象引用。您不需要大小信息,因为您所做的总是要“指向”某物,而不是为某物留出空间。这也是为什么在 Java 中,您总是想要执行 Foo x = new Foo()

关于c++ - 在 A 类中引用 A 类的其他实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10455392/

相关文章:

c++ - 如何在派生类中存储在基类初始化期间获得的信息?

javascript - 向现有 javascript 对象添加新属性

javascript - 将数组元素转换为对象键 - JavaScript

javascript - 如果类列表包含多个特定类

c# - 从类属性获取绑定(bind)值,默认绑定(bind)属性对我不起作用!

c++ - 字段的类型不完整 C++

Java在循环中实例化一个类

c++ - 轻松编写保持状态的模拟

C++ 对 typedef void (* somename) (arg1, arg2) 的警告;

c++ - GNU 使 : customize library search path in Makefile