<未解析的重载函数类型>
<unresolved overloaded function type>
在我的名为Mat
的类中,我想要一个以另一个函数为参数的函数。现在我有下面的4个函数,但在调用print((时出错。第二行给了我一个错误,但我不明白为什么,因为第一行有效。唯一的区别是函数f
不是类Mat
的成员,但f2
是。故障为:error: no matching function for call to Mat::test( < unresolved overloaded function type>, int)'
template <typename F>
int Mat::test(F f, int v){
return f(v);
}
int Mat::f2(int x){
return x*x;
}
int f(int x){
return x*x;
}
void Mat::print(){
printf("%dn",test(f ,5)); // works
printf("%dn",test(f2 ,5)); // does not work
}
为什么会发生这种情况?
pointer-to-member-function
的类型不同于pointer-to-function
。
函数的类型不同,这取决于它是普通函数还是某个类的非静态成员函数:
int f(int x);
the type is "int (*)(int)" // since it is an ordinary function
和
int Mat::f2(int x);
the type is "int (Mat::*)(int)" // since it is a non-static member function of class Mat
注意:如果它是类Fred的静态成员函数,那么它的类型与普通函数的类型相同:"int (*)(char,float)"
在C++中,成员函数有一个隐式参数,它指向对象(成员函数内部的此指针(。正常C函数可以被认为具有不同的调用约定从成员函数中,因此其指针的类型(指向成员函数的指针与指向函数的指针(不同,并且不兼容C++引入了一种新类型的指针,称为指向成员的指针,该指针只能通过提供对象来调用。
注意:不要试图将指向成员函数的指针"强制转换"到指向函数的指针;结果是不确定的,可能是灾难性的。例如,指向成员函数的指针不需要包含适当功能的机器地址正如上次所说例如,如果您有一个指向正则C函数的指针,请使用顶级(非成员(函数或静态(类(成员函数。
这里和这里有更多关于这个的信息。
这里的问题是f2
是Mat
上的一个方法,而f
只是一个自由函数。你不能单独调用f2
,它需要一个Mat
的实例来调用它
printf("%dn", test([=](int v){return this->f2(v);}, 5));
那里的=
将捕获this
,也就是您需要调用的f2
。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 是否需要使用 - &gt;运算符在C 中调用成员函数时