我有以下代码:
#include<iostream>
using namespace std;
typedef void (*HandlerFunc)(int, int);
HandlerFunc mr;
HandlerFunc mm()
{
return mr;
}
void sample(int a, int b, HandlerFunc func)
{
}
void main()
{
sample(1, 2, mm);
}
这里我试图将HandlerFunc
类型的函数传递给另一个函数,但是我收到一个错误:
错误:*:无法将参数3从
'void (__cdecl *(void))(int,int)'
转换为'void (__cdecl *)(int,int)'
如果我输入sample(1, 2, (HandlerFunc)mm);
,一切正常
有人能说出解决错误问题的方法是什么?
答案 0 :(得分:5)
HandlerFunc mm()
{...}
应该是:
void mm(int, int)
{...}
你的函数sample()
将指向函数的指针(你typedef
d作为HandlerFunc
)作为最后一个参数。
作为此参数传递的函数的地址必须与作为指针的函数的类型相匹配。
答案 1 :(得分:4)
不,不,你混淆了这些类型。 mm
是一个返回适当类型的函数指针的函数。但是,mm
本身不是的相应类型 - 它不接受任何参数。
您应该在main中传递mr
,或者传递mm()
(即调用mm并传递返回值)
答案 2 :(得分:0)
main中的代码应为:
sample(1,2,mm());
当mm返回HandlerFunc时,它本身不是一个。
答案 3 :(得分:0)
HandlerFunc mm()
{
return mr;
}
这意味着nm
是一个不会收到任何批评(void
)的函数,它会重新指向void (*)(int, int)
类型函数的指针
这样只有你得到那个错误。