gpt4 book ai didi

c - void 表达式的无效使用

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:34 25 4
gpt4 key购买 nike

我正在为一个类开发一个通用链表,但遇到了问题。

我在这一行遇到无效使用 void 表达式错误。

freeNode(L->head, L->freeObject( L->head->obj));

这是 freeNode 的原型(prototype)。

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 *);
};

我知道问题出在传递函数指针而不是函数的输出,但我不知道我的错误是什么。

最佳答案

这个原型(prototype):

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 及其所有用例中做什么,但目前尚不清楚最佳方法到底是什么。

关于c - void 表达式的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com