#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] 删除。
我来说两句