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

punto e basta's Avatar, Join Date: Aug 2011
Newbie Member
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
0
codesAllOver's Avatar, Join Date: Aug 2011
Newbie Member
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.
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
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.