【发布时间】:2020-10-25 18:38:38
【问题描述】:
#include<iostream>
#include<bitset>
#include<string.h>
#include<string>
#include<vector>
#include<math.h>
#include<stdarg.h>
class b {
public:
b();
void ef(void(*f)());
};
class d : public b{
public:
d();
void print();
};
b::b() {}
void b::ef(void(*f)()) { f(); }
d::d(): b(){}
void d::print() { cout<<"WORKS"<<endl; }
int main() {
d obj;
obj.ef(obj.print);
}
我的派生类方法有问题,我将d::print() 作为b::ef() 的参数执行,编译时出现此错误:
"错误:无法将 '' 转换为 '无效(*)()'"
你能帮我解决它吗?谢谢
【问题讨论】:
-
您可以将成员函数指向为
&d::print。但是成员函数有一个隐藏参数:一个指向对象的指针。所以函数指针签名不匹配。 -
指向非成员函数的指针与指向成员函数的指针不兼容。区别在于指针非成员函数可以在没有对象的情况下调用,但指向成员函数的指针需要一个对象。并且传递
obj.print并not 仅传递对象的函数(您确实需要使用地址运算符&来实现)。我建议您查看模板或std::function和lambdas。
标签: c++ oop member-function-pointers