结构不完整的类型错误

时间:2013-06-08 16:05:48

标签: c

很抱歉打扰你,我是c的新手,我需要一些帮助:我试图创建一个结构,里面有一个相同结构类型的元素(就像树中的节点树,它可以有孩子节点)。这是我到目前为止的代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct vectorObject vectorObject;

struct vectorObject{
  int value; //Value of node
  int hasChildren; //1 if it has and 0 if not
  int level; //0 for leaf, 1 for leaf parent, 2 for parent of parent, etc...

  vectorObject leftSon;
  vectorObject rightSon;
};

vectorObject *listObjetos;
vectorObject *priorityQueue;


int main(void) {...}

问题在于我一直收到此错误

field 「leftSon」 has incomplete type

我不知道该怎么办。在java中你可以创建一个类,这个类可以将自己作为一个对象,因为你正在使用对象,但在这里我不知道会发生什么。请你帮助我好吗?非常感谢你,很抱歉打扰你。

1 个答案:

答案 0 :(得分:1)

在C中(与Java不同),默认值为NOT对象引用。因此,声明一个像你一样的对象,编译器想要知道它的完整大小和组合 - 这在声明时是不可用的(因为你的定义是递归的)。

解决这个问题的方法是明确使用对象引用。在C中,这是通过使用指针来完成的。这样,编译器就知道要声明的对象的大小,因为它知道指针的大小(固定)。它很乐意继续完成定义,此时整个对象的大小和组成都是已知的。

struct vectorObject{
  int value; //Value of node
  int hasChildren; //1 if it has and 0 if not
  int level; //0 for leaf, 1 for leaf parent, 2 for parent of parent, etc...

  vectorObject* leftSon;
  vectorObject* rightSon;
};