#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int val;
struct tree *left, *right;
}tree;
struct tree *root;
struct tree *add_vertex(int val)
{
struct tree *root = malloc(sizeof(struct tree*));
root->val = val;
root->left = NULL;
root->right = NULL;
return root;
}
void print_tree(struct tree *root)
{
printf("%d\n", root->val);
if(root->left == NULL)
return;
else
print_tree(root->left);
if(root->right == NULL)
return;
else
print_tree(root->right);
}
int main() {
struct tree *root = NULL;
root = add_vertex(1);
root->left = add_vertex(2);
root->right = add_vertex(3);
root->left->left = add_vertex(4);
root->left->right = add_vertex(5);
root->right->left = add_vertex(6);
root->right->right = add_vertex(7);
print_tree(root);
return 0;
}
这段代码正在生成
prog.c: In function 'add_vertex':
prog.c:15:9: error: dereferencing pointer to incomplete type 'struct tree'
root->val = val;
^'
删除typedef
并进行特定更改会很好。
答案 0 :(得分:0)
问题是
typedef struct
{
int val;
struct tree *left, *right;
}tree;
定义了一个名为tree
的类型,它是未命名结构的类型。
您的代码中没有定义struct tree
。
如果删除typedef
,将定义一个名为tree
的结构,并且代码将正常工作。
也就是说,如果您想使用typedef
,可以做类似的事情
struct tree
{
int val;
struct tree *left, *right;
};
typedef struct tree tree;
//......
tree *add_vertex(int val) //no need to use struct keyword anymore
{
tree *root = malloc(sizeof(*root));
root->val = val;
root->left = NULL;
root->right = NULL;
return root;
}