2

我有以下代码:

#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)'

如果我键入 castsample(1, 2, (HandlerFunc)mm);一切正常。
谁能告诉解决错误问题的方法是什么?

4

4 回答 4

5
HandlerFunc mm()
{...}

应该:

void mm(int, int)
{...}

您的函数sample()将指向函数(you typedefd asHandlerFunc)的指针作为最后一个参数。作为此参数传递的函数的地址必须与它所指向的函数的类型相匹配。

于 2012-06-20T10:38:42.380 回答
4

不,不,你混淆了类型。mm是一个返回适当类型的函数指针的函数。然而,mm它本身不是合适的类型——它不接受任何参数。

您应该传入mrmain,或者通过mm()(即-调用mm并传递​​返回值)

于 2012-06-20T10:40:12.310 回答
0

main 中的代码应该是:

sample(1,2,mm());

由于 mm 返回一个 HandlerFunc,它本身不是一个。

于 2012-06-20T10:40:03.510 回答
0
HandlerFunc mm() 
{     
   return mr; 
}  

这意味着nm函数不会接收任何 agruments( void),它会返回一个指向函数类型的指针void (*)(int, int)

所以只有你得到那个错误。

于 2012-06-21T11:29:38.660 回答