gpt4 book ai didi

c++ - 编译错误。定义不匹配。无效(*)(无效*)

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:08 33 4
gpt4 key购买 nike

我有一个接受以下参数的函数:

int setvalue(void (*)(void *));

为了满足参数:void (*)(void *),我创建了这样一个函数:

    static void *freeFunction(void *freeAbc)
{
AllocAbc *abc = (AllocAbc*) freeAbc;
if (abc)
{
delete abc;
}
return NULL;
}

我正在尝试将两者结合使用:

    AllocAbc *allocAbc = new AllocAbc();
...
void *freeAbc = (void *) allocAbc;
if (setvalue (freeFunction(freeAbc)) < 0)
{
...
}

我收到一条错误消息,提示 error: invalid conversion from ‘void*’ to ‘void (*)(void*)’ [-fpermissive]

这里应该更改什么(在 freeFunction 定义中或我使用两者的方式)以使其工作。

谢谢。

最佳答案

您的函数应该返回 void 而不是 void *

static void freeFunction(void *freeAbc)
{
...
}

(*)表示setvalue的参数是一个函数指针。它不是该函数返回类型的一部分。

(void (*)(void *)
^^^^ ^ ^^^^^^
|| | ||
|| | ++ parameter types
|| |
|| + function pointer
||
++ return type

此外,要调用 setvalue,您需要传递函数名称而不调用它。

if (setvalue(freeFunction) < 0)

为了更清楚,您可能需要添加一个 & 来表明您没有调用该函数。 & 在传递函数指针时是可选的,所以这只是一个可读性问题。

if (setvalue(&freeFunction) < 0)

关于c++ - 编译错误。定义不匹配。无效(*)(无效*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064332/

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