参考A类中A类的其他实例

时间:2012-05-04 20:02:33

标签: 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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

Mooing Duck在评论中有答案。问题来自于您在尝试定义节点时尚未完全定义节点。这意味着编译器无法确定要分配多少内存。

解决办法是让prevNode成为Node*,因为那样你就宣布了一个已知大小的东西。

有趣的是,如果您是从Java开始使用C ++,那么可以在java中使用它。这是因为Java中的任何声明都总是一个对象引用。您不需要拥有大小信息,因为您正在做的事情总是“指向”某些东西,而不是为某些东西提供空间。这也是为什么在Java中,你总是想做Foo x = new Foo()