将指向函数的指针作为参数传递

Passing pointer to function as parameter

本文关键字:参数传递 指针 函数      更新时间:2023-10-16

我有以下代码:

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

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

HandlerFunc mm()
{...}

应该是:

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

你的函数sample()将指向函数(typedef d作为HandlerFunc)的指针作为最后一个参数。作为此参数传递的函数的地址必须与它作为指针的函数的类型匹配。

不,不,你混淆了类型。 mm 是一个返回相应类型的函数指针的函数。但是,mm本身不属于适当的类型 - 它不接受任何参数。

你应该在main中传递mr,或者传递mm()(即 - 调用mm并传递返回值)

main 中的代码应该是:

sample(1,2,mm());

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

HandlerFunc mm() 
{     
   return mr; 
}  

这意味着nm函数不会接收任何集合(void),并且它将重新指向类型为void (*)(int, int)的函数的指针

这样只有您会收到该错误。

相关文章: