0

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

4

1 回答 1

2

在 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;
};
于 2013-06-08T16:38:09.840 回答