2016-10-13 76 views
3

我收到一条错误:“在我定义我的删除功能的行中删除''的冲突类型。 大多数情况下,在声明前调用函数时发生此错误。 但是,我在主函数中调用remove(),而事先已经定义了它。 那么,为什么错误?!?错误:'删除'的冲突类型

#include<stdio.h> 
    #include<stdbool.h> 

    struct node 
    { 
     int data; 
     struct node* left; 
     struct node* right; 
    }; 

    struct node* newNode(int x) 
    { 
     struct node* temp=(struct node*)malloc(sizeof(struct node)); 
     temp->data=x; 
     temp->left=NULL; 
     temp->right=NULL; 
     return temp; 
    } 

    struct node* insert(struct node* root,int x) 
    { 
     if (root==NULL) 
      root=newNode(x); 
     else if (x<=root->data) 
      root->left=insert(root->left,x); 
     else 
      root->right=insert(root->right,x); 
     return root; 
    } 

    struct node* remove(struct node* root,int x) 
    { 
     if (root==NULL) 
      printf("Node not found !\n"); 
     else if (x==root->data) 
     { 
      struct node* temp=root; 
      root=NULL; 
      free(temp); 
      printf("Node removed !\n"); 
     } 
     else if (x<=root->data) 
      root->left=remove(root->left,x); 
     else 
      root->right=remove(root->right,x); 
     return root; 
    } 

    bool search(struct node* root,int x) 
    { 
     if (root==NULL) 
      return false; 
     else if (x==root->data) 
      return true; 
     else if (x<=root->data) 
      return search(root->left,x); 
     else 
      return search(root->right,x); 
    } 

    void main() 
    { 
     struct node* root=NULL; 
     root=insert(root,20); 
     root=remove(root,10); 
     root=insert(root,8); 
     root=remove(root,10); 
     root=insert(root,22); 
     root=remove(root,22); 
     root=insert(root,21); 
     root=remove(root,10); 
     root=insert(root,12); 
     root=remove(root,12); 
     root=insert(root,16); 
     root=remove(root,10); 
     root=insert(root,0); 
     root=remove(root,10); 
     root=insert(root,11); 
     root=remove(root,10); 
     root=remove(root,11); 
     printf(search(root,10)?"Found\n":"Not Found\n"); 
     printf(search(root,20)?"Found\n":"Not Found\n"); 
     printf(search(root,11)?"Found\n":"Not Found\n"); 
     printf(search(root,17)?"Found\n":"Not Found\n"); 
    } 

回答

2

当编译代码,我得到这个:

/tmp/x1.c:32: error: conflicting types for ‘remove’ 
/usr/include/stdio.h:154: error: previous declaration of ‘remove’ was here 

正如你可以看到,有一个名为removestdio.h声明的函数。这与您的定义相冲突。

您需要重命名您的功能,以免与stdio.h中的定义冲突。

+0

你先生,是个天才! 一吨。 – iamrkcheers

+0

@iamrkcheers很高兴能帮到你。如果您觉得它有用,请随时[接受此答案](http://stackoverflow.com/help/accepted-answer)。 – dbush