我定义了两个函数,一个只有一个参数,另一个有两个参数,同时定义了一个回调函数,它的过程函数是只有一个参数的,代码如下:
1 #include <iostream> 2 using namespace std; 3 4 void OneParam(int n) 5 { 6 cout<<"调用OneParam"<<endl; 7 } 8 9 void TwoParam(int n, int a=100) 10 { 11 cout<<"调用TwoParam"<<endl; 12 } 13 14 void myCallback(void (*One)(int ),int n) 15 { 16 One(n); 17 } 18 19 typedef void (*ONEPARAM)(int ); 20 21 int main() 22 { 23 myCallback( (ONEPARAM)TwoParam,100); 24 return 0; 25 26 }
程序执行结果是输出:调用TwoParam, 也就是说回调函数调用的是TwoParam函数,但我的本意是期望调用OneParam函数。
我用的是Visual Studio 2008,其他的编译器没试过。
请问:
1:为什么回调函数调用的是有两个参数的函数? 它的声明可指定了调用一个参数的啊。
2:怎样才能实现我所期望的只调用一个参数的函数?
myCallback( (ONEPARAM)
OneParam
,100);
我要显示用Twoparam作为过程函数,而且不能去改那个回调函数
因为你强制转换了, 否则编译器会报警告诉你, 函数格式不匹配