Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error : Conflicting types for 'remove'

Tags:

c

I am getting an error "Conflicting types for 'remove'" at the line where I define my remove function. Most cases for this error occur whilst calling a function before its declaration. However, I'm making calls to my remove() in the main function, whilst having defined it beforehand. Then, why the error ?!?

    #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");
    }
like image 846
iamrkcheers Avatar asked Oct 27 '25 10:10

iamrkcheers


1 Answers

When compiling your code, I get this:

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

As you can see, there is a function declared in stdio.h named remove. That conflicts with the definition you have.

You'll need to rename your function so it doesn't clash with the definition in stdio.h.

like image 78
dbush Avatar answered Oct 28 '25 23:10

dbush



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!