我目前正在学习C,而我在实现二叉搜索树方面遇到了问题。
我已经声明了节点和树结构,但是编译器给了我"不兼容的指针类型"警告以下四个函数返回或修改每个节点的左右指针。
我已尝试阅读其他类似问题,但我无法理解原因,因为所有类型都应该是node *
。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int data;
struct node *left, *right;
} node;
typedef struct{
node *root;
int size;
} tree;
node* getLeft(node *n){
return n->left;
}
node* getRight(node *n){
return n->right;
}
void setLeft(node *n, node *i){
n->left=i;
}
void setRight(node *n, node *d){
n->right=d;
}
int main() {
return 0;
}
错误消息是:
ask.c: In function ‘getLeft’:
ask.c:16:5: warning: return from incompatible pointer type
return n->left;
^
ask.c: In function ‘getRight’:
ask.c:20:5: warning: return from incompatible pointer type
return n->right;
^
ask.c: In function ‘setLeft’:
ask.c:24:12: warning: assignment from incompatible pointer type
n->left=i;
^
ask.c: In function ‘setRight’:
ask.c:28:13: warning: assignment from incompatible pointer type
n->right=d;
^
答案 0 :(得分:3)
节点typedef
声明不正确。它指的是不存在的struct node
。修复只是使用命名结构而不是匿名结构(可能你打算做什么)。
typedef struct node {
int data;
struct node *left, *right;
} node;