c - 结构的不完整类型错误

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

最佳答案

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

解决这个问题的方法是显式使用对象引用。在 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;
};

关于c - 结构的不完整类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001352/

相关文章:

c - 复合文字的生命周期

c - 使用函数构建结构体

c - free() 是否将内存归零?

c++ - clang 是否有 _ExtFloat 就像它有 _ExtInt 一样?

c - 如果检查 null 然后检查 C 中的其他条件,复合是否总是安全的?

c - 返回 1.0f 给我 1065353216

c - 在 C 中返回一个 void 指针作为函数参数

c - 如何检查我的字节标志,验证特定位是 1 还是 0?

ios - 在 Swift 中使用 C 库获取不安全指针

c - 登录前在 Ubuntu 中自动启动 C 应用程序