why do I get the error "conflicting types for..." ?

Newbie Member
9Aug2011,14:25   #1
punto e basta's Avatar
This is my code. The types are identical as far as I can see... If anyone could point out the error I'd be grateful. By the way I'm trying to implement a very simple singly-linked list. Any comments or suggestions would are kindly welcomed. Thanks!

Code:
#include <stdio.h>
#include <stdlib.h>

//void list_insert (int k, struct node* head, struct node* curr);

int main()
{
    struct node
    {
        int numdata;
        struct node* next;
    };

    struct node* head;
    struct node* curr;
    head=NULL;
    curr=NULL;

    list_insert(1, head, curr);
    list_insert(2, head, curr);
    list_insert(3, head, curr);

    return 0;
}

void list_insert (int k, struct node* head, struct node* curr)
{
    curr->numdata=k;
    curr->next=head;
    head=curr;
}

void show_list(node* head)
{
    node* curr;
    curr=head;
    printf("\n");
    while(curr!=NULL)
        printf("%d ",curr->numdata);
    printf("end of list\n")
}
*****************
It says: "conflicting types for 'list_insert.' " Why?

Last edited by shabbir; 9Aug2011 at 17:58.. Reason: Code blocks
Newbie Member
9Aug2011,23:22   #2
codesAllOver's Avatar
Well, you have declared Structure Node inside the main method so the declaration is visible only to the main method.
Rest of teh compiler doesn't know what a node is, so in order to use this in all the functions of your program just declare it out side the main block....and your problem should be solved.
Mentor
14Aug2011,12:46   #3
xpi0t0s's Avatar
Also why is the prototype commented out? Without this the compiler will assume list_insert is defined
Code:
int list_insert();
so if you don't want that, use prototypes and DON'T comment them out.