1 c
#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;
Run Code Online (Sandbox Code Playgroud)
我得到了错误:
error: unknown type name ‘TreeNode’
TreeNode *left_child;
error: unknown type name ‘TreeNode’
TreeNode *right_child;
Run Code Online (Sandbox Code Playgroud)
我不明白为什么……你能解释一下吗?
使用您的代码:
typedef struct TreeNode{
int weight;
TreeNode *left_child;
TreeNode *right_child;
} TreeNode;
Run Code Online (Sandbox Code Playgroud)
在解析TreeNode该行之前,该名称是未知的} TreeNode;。在处理该行时TreeNode *left_child;,编译器知道有一个类型struct TreeNode,但它对类型一无所知TreeNode。
您还可以使用:
typedef struct TreeNode Treenode;
struct TreeNode
{
int weight;
TreeNode *left_child;
TreeNode *right_child;
};
Run Code Online (Sandbox Code Playgroud)
第一行说“有一个结构类型struct TreeNode,并且TreeNode是该类型的别名”。其余的代码行定义了struct TreeNode.
或者,正如其他答案指出的那样,您可以使用:
typedef struct TreeNode
{
int weight;
struct TreeNode *left_child;
struct TreeNode *right_child;
} TreeNode;
Run Code Online (Sandbox Code Playgroud)
编译器对类型struct TreeNode有足够的了解,以便在读取定义时能够处理指向该类型的指针。注释 C11 §6.7.2.1 结构和联合说明符 ¶3:
结构或联合不应包含不完整或函数类型的成员(因此,结构不应包含自身的实例,但可以包含指向自身实例的指针),...
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |