我有以下代码:
#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);
}
Run Code Online (Sandbox Code Playgroud)
这里我试图将类型的函数传递HandlerFunc给另一个函数,但是我收到一个错误:
错误:*:无法将参数3转换
'void (__cdecl *(void))(int,int)'为'void (__cdecl *)(int,int)'
如果我输入演员,因为sample(1, 2, (HandlerFunc)mm);一切正常.
任何人都可以告诉解决错误问题的方法是什么?
HandlerFunc mm()
{...}
Run Code Online (Sandbox Code Playgroud)
应该:
void mm(int, int)
{...}
Run Code Online (Sandbox Code Playgroud)
你的函数sample()将一个指向函数的指针(你typedef作为HandlerFunc)作为最后一个参数.作为此参数传递的函数的地址必须与作为指针的函数的类型相匹配.