【发布时间】:2011-01-08 22:46:05
【问题描述】:
我的教授在 .h 文件中定义了这个
void list_map(INTLIST* list, void (*f)(void *)); /*Applies a function to each element of the list */
我这样写函数:
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)
}
}
}
我在 main 中这样称呼它:
list_map(aList[i], (void*)list_sort);
在windows环境下,没什么可抱怨的,但我必须在Linux环境下运行它。我正在使用 makefile 编译所有代码,但收到此警告和错误:
*c++ -O2 -c main.c main.c:在函数“int main(int, char**)”中: main.c:53: 警告:不推荐从字符串常量到“char*”的转换 main.c:123:错误:从“void ()(INTLIST)”到“void ()(void)”的无效转换 main.c:123: 错误: 初始化参数 2'void list_map(INTLIST*, void ()(void))' make: *** [main.o] 错误 1*
有人可以先帮助解决错误,然后再解决警告吗?
编辑部分:
有人要了 list_sort 函数,这里是:
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;
}
}
【问题讨论】:
-
list_sort长什么样子? -
你能改变 list_sort 函数,还是教授也解决了这个问题?如果它是固定的,似乎你已经被处理了一个强硬的手。
标签: c