C递归typedef结构

智原安
#include <stdio.h>
#include <stdlib.h>

#define MAX_ELEMENT 100

typedef struct TreeNode{
    int weight;
    TreeNode *left_child;
    TreeNode *right_child;
} TreeNode;

typedef struct element{
    TreeNode *ptree;
    int key;
} element;

typedef struct HeapType{
    element heap[MAX_ELEMENT];
    int heap_size;
} HeapType;

我得到的错误:

error: unknown type name ‘TreeNode’
     TreeNode *left_child;
error: unknown type name ‘TreeNode’
     TreeNode *right_child;

我不明白为什么...你能解释吗?

乔纳森·莱夫勒

使用您的代码:

typedef struct TreeNode{
    int weight;
    TreeNode *left_child;
    TreeNode *right_child;
} TreeNode;

解析TreeNode该行之前,该名称是未知的} TreeNode;处理行时TreeNode *left_child;,编译器知道有一个类型struct TreeNode,但是对类型却一无所知TreeNode

您还可以使用:

typedef struct TreeNode Treenode;

struct TreeNode
{
    int weight;
    TreeNode *left_child;
    TreeNode *right_child;
};

第一行说:“存在a结构类型struct TreeNode,并且TreeNode是该类型的别名”。其余的代码行定义了struct TreeNode

或者,如其他答案所指出的,您可以使用:

typedef struct TreeNode
{
    int weight;
    struct TreeNode *left_child;
    struct TreeNode *right_child;
} TreeNode;

编译器对类型struct TreeNode足够的了解,以便能够在读取定义时处理指向该类型的指针。注释C11§6.7.2.1结构和联合说明符¶3

结构或联合不得包含具有不完整或函数类型的成员(因此,结构不得包含其自身的实例,但可以包含指向其自身的实例的指针),…

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章