将指向函数的指针作为参数传递
Passing pointer to function as parameter
我有以下代码:
#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)
的函数的指针
这样只有您会收到该错误。
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将函数指针数组中的函数指针作为模板参数传递
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 如何将指针变量作为引用参数传递?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- C++将指向成员的指针作为模板参数传递
- 通过引用函数传递指针参数是什么意思?
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 将函数指针作为函数参数传递的目的
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 使用 C++11 将指向成员函数的指针作为参数传递
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 在一行中将默认类型值上的指针作为参数传递
- 将双指针作为参数传递给需要引用 std::vector <double>的函数