如何解决从不兼容的指针类型传递'Insert'的参数1
struct BstNode* GetNewNode(int data) {
struct BstNode* newNode = (struct BstNode*)malloc(sizeof(struct BstNode));
newNode->data=data;
newNode->left=NULL;
newNode->right=NULL;
return newNode;
}
void Insert(struct BstNode** root,int data) {
if(*root==NULL) { //empty tree
*root = GetNewNode(data);
} else if (data <= (*root)->data) {
(*root)->left = Insert((*root)->left,data);
} else {
(*root)->right = Insert((*root)->right,data);
}
}
int main() {
struct BstNode* root; //to store address of root node
root = NULL; //setting tree as empty
Insert(&root,15);
Insert(&root,10);
Insert(&root,20);
}
我在第Insert((*root)->left,data);
行有错误。我知道(*root)->left
是 结构BstNode *不是 结构BstNode **。但是我不知道如何访问结构BstNode **。我已经尝试过(** root)-> left,*((* root)-> left)和&((* root)-> left),但这不起作用
解决方法
这些调用试图从void
函数分配值,该函数不返回任何内容:
} else if (data <= (*root)->data) {
(*root)->left = Insert((*root)->left,data);
} else {// void function
(*root)->right = Insert((*root)->right,data);
} // void function
假设您的结构定义类似于:
struct BstNode {
int data;
struct BstNode *left;
struct BstNode *right;
};
使insert()
的返回类型相同:
struct BstNode* Insert(struct BstNode** root,int data) {
除此之外,编译器还应针对 multiple 行指示类似于以下内容的警告:
25,32 warning: incompatible pointer types passing 'struct BstNode *' to parameter of type 'struct BstNode **'; take the address with &
例如,使用以下地址的: (*root)->left
(即&(*root)->left
)
解决这些问题,以及在函数Insert
中添加return语句,将产生干净的构建。
struct BstNode* Insert(struct BstNode** root,int data) {
if(*root==NULL) { //empty tree
*root = GetNewNode(data);
} else if (data <= (*root)->data) {
(*root)->left = Insert(&(*root)->left,data);
} else {
(*root)->right = Insert(&(*root)->right,data);
}
return *root;
}
之后,对main()
函数的这些较小修改将使您接近预期的目标:
Insert(&root,15);
Insert(&root,10);
Insert(&root,20);
return 0;
,
(*root)->left
为struct BstNode*
,因此添加&
以获得其地址,其地址为struct BstNode**
。
还请注意,您无法将void
分配给某些内容。
因此
(*root)->left = Insert((*root)->left,data);
和
(*root)->right = Insert((*root)->right,data);
应该是
Insert(&(*root)->left,data);
和
Insert(&(*root)->right,data);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。