My professor defined this in the .h file
void list_map(INTLIST* list, void (*f)(void *)); /*Applies a function to each element of the list */
I wrote the function like this:
void list_map(INTLIST* list, void (*f)(void *))
{
INTLIST* pTemp=NULL;
if (list == NULL)
{
//list is empty
}
else
{
for(pTemp=list; pTemp->next!=NULL; pTemp=pTemp->next)
{
f(pTemp); //f is a function pointer we call list map from main like list_map(lst, list_sort)
}
}
}
I call it in main like this:
list_map(aList[i], (void*)list_sort);
In windows environment, no complaints, but I have to run this in a Linux environment. I'm using a makefile to compile all of the code and I get this warning and error:
c++ -O2 -c main.c main.c: In function ‘int main(int, char*)’: main.c:53: warning: deprecated conversion from string constant to ‘char*’ main.c:123: error: invalid conversion from ‘void ()(INTLIST)’ to ‘void ()(void)’ main.c:123: error: initializing argument 2 of ‘void list_map(INTLIST*, void ()(void))’ make: * [main.o] Error 1*
Can somebody help with the error first and then maybe with the warning?
Edit Portion:
Someone asked for the list_sort function, here it is:
void list_sort(INTLIST* list)
{
INTLIST* pTemp=NULL;
INTLIST* pTemp2=NULL;
pTemp=list; //temp pointers to compare node values
pTemp2=list;
if (pTemp->next !=NULL) //move to second node
{
pTemp2=pTemp2->next;
}
while(pTemp2 != NULL)
{
//we implement a selection sort
//check if incoming node->datum with each node in the list
//swap values if <
if (pTemp2->datum < pTemp->datum)
{
//swap the values
int temp = pTemp->datum;
pTemp->datum = pTemp2->datum;
pTemp2->datum = temp;
}
//advance the pointer
pTemp2=pTemp2->next;
}
}