iamrkcheers iamrkcheers - 1 year ago 75
C Question

Error : Conflicting types for 'remove'

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");
}

Answer Source

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download