将指针作为参数传递给函数

时间:2012-06-20 10:37:25

标签: c++ pointers

我有以下代码:

#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);,一切正常 有人能说出解决错误问题的方法是什么?

4 个答案:

答案 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)类型函数的指针

这样只有你得到那个错误。