我正在研究一个类的通用链表并遇到问题。
我在这一行上无效使用了void表达式错误。
freeNode(L->head, L->freeObject( L->head->obj));
这是freeNode的原型。
void freeNode(NodePtr node, void (*freeObject)(const void *));
以下是L
(通用链表)的结构。
struct list {
int size;
NodePtr head;
NodePtr tail;
unsigned long int (*compareTo)(void *);
char * (*toString)(void *);
void (*freeObject)(void *);
};
我知道问题在于传递应该是函数指针而不是函数的输出,但是我无法弄清楚我的错误是什么。
答案 0 :(得分:4)
这个原型:
void freeNode(NodePtr node, void (*freeObject)(const void *));
表示第二个参数是指向返回void
的函数的指针。但是,电话:
freeNode(L->head, L->freeObject(L->head->obj));
第二个参数实际上是调用L->freeObject(L->head->obj)
的结果,void
本身就是freeNode
,而不是指向函数类型的指针。
如果要将自由函数传递给freeNode
,那么您希望将指针作为第三个参数传递给节点L->freeObject
并传递freeNode(L->head, L->freeObject, L->head->obj)
作为第二个论点。例如,您需要致电freeNode
。在freeNode
内,您可以使用节点(第三个参数)调用函数(来自第二个参数)。虽然我不知道你想在{{1}}及其所有用例中做什么,但是目前还不清楚最好的方法是什么。