首页 新闻 会员 周边

C++回调函数的参数截断问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-06-27 23:01

  我定义了两个函数,一个只有一个参数,另一个有两个参数,同时定义了一个回调函数,它的过程函数是只有一个参数的,代码如下:

 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:怎样才能实现我所期望的只调用一个参数的函数?

问题补充:

我是要在显示用TwoParam作过程函数的情况下,调用OneParam,因为第二个参数不能少,而且在实际中那个回调函数是个库函数,我不可能去改那个库函数

沉没之鱼的主页 沉没之鱼 | 初学一级 | 园豆:188
提问于:2013-06-07 15:26
< >
分享
最佳答案
0
myCallback( (ONEPARAM)
OneParam
,100);
收获园豆:20
悟了 | 小虾三级 |园豆:521 | 2013-06-07 16:06

我要显示用Twoparam作为过程函数,而且不能去改那个回调函数

沉没之鱼 | 园豆:188 (初学一级) | 2013-06-07 16:32

因为你强制转换了, 否则编译器会报警告诉你, 函数格式不匹配

悟了 | 园豆:521 (小虾三级) | 2013-06-07 17:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册