void表达式的使用无效

时间:2014-04-26 15:37:46

标签: c function-pointers void-pointers

我正在研究一个类的通用链表并遇到问题。

我在这一行上无效使用了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 *);
};

我知道问题在于传递应该是函数指针而不是函数的输出,但是我无法弄清楚我的错误是什么。

1 个答案:

答案 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}}及其所有用例中做什么,但是目前还不清楚最好的方法是什么。