我有一个带有以下参数的函数:
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定义中或者我使用两者的方式)以使其工作。
感谢。
答案 0 :(得分:3)
您的函数应该返回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)
答案 1 :(得分:3)
你有两个问题:
freeFunction
返回void
而不是void *
。freeFunction(freeAbc)
的返回值传递给setValue
,而不是指向函数本身的指针。答案 2 :(得分:1)
freeFunction
会返回void*
,但setvalue
需要一个返回void
的函数。它们显然不是同一类型。
此外,您将freeFunction
的返回值传递给setvalue
,但setvalue
需要一个函数指针。