很抱歉打扰你,我是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中你可以创建一个类,这个类可以将自己作为一个对象,因为你正在使用对象,但在这里我不知道会发生什么。请你帮助我好吗?非常感谢你,很抱歉打扰你。
答案 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;
};