C冲突类型错误,而实际上没有冲突类型?
因此,我在.h文件中声明了函数,为此,我只是复制并粘贴了函数声明,并添加了一个分号,所以我不知道错误来自何处 资料来源:C冲突类型错误,而实际上没有冲突类型?,c,binary-search-tree,C,Binary Search Tree,因此,我在.h文件中声明了函数,为此,我只是复制并粘贴了函数声明,并添加了一个分号,所以我不知道错误来自何处 资料来源: struct node* remove(struct node* node, int key) { if(search(root,removeMe)!=NULL){ struct node* temp=search(root,removeMe); if(temp->left==NULL && temp-&
struct node* remove(struct node* node, int key)
{
if(search(root,removeMe)!=NULL){
struct node* temp=search(root,removeMe);
if(temp->left==NULL && temp->right==NULL)
{
temp=NULL;
return node;
}
}
return node;
}
标题:
#ifndef PROJECT2_BST_H
#define PROJECT2_BST_H typedef struct node {
int key;
struct node* left;
struct node* right; }; struct node* insert(struct node* node, int key); void inorder(struct node *root);
//void quit(struct node *root); struct node* search(struct node* root,
int key); struct node* remove(struct node* node, int key);
#endif //PROJECT2_IO_H }
您的问题是
remove
是一个标准库函数,通常在stdio.h
中定义为
int remove (const char *__filename)
因此,我建议您更改函数的名称。也许在这种情况下,您可以为每个函数名添加前缀,例如
节点
,以防止名称冲突;因此,node\u remove
,node\u insert
,等等。头的格式如图所示,头不应编译。请确保显示的代码与标题中的实际代码相匹配。我可以猜,但我可能猜错了。那个头代码看起来像是扔进了搅拌机。你能澄清一下吗?值得注意的是,你的remove()
函数实际上并没有从链表中删除内容,你只是在更改一个废弃的局部变量,它是指针的副本,如果它这样做了,那就是内存泄漏。它还假定temp
是一个有效的指针,在不首先检查的情况下继续并取消引用它,这是未定义的行为,如果search
返回不一致的结果或在线程化代码中,则应返回不一致的结果。您还可以执行search
两次,一次丢弃结果,第二次捕获结果。您应该搜索一次并捕获它。