我试图在c ++类中使用函数指针但是出错了。
#include <cstdio>
#include <iostream>
using namespace std;
class abc{
public:
void hello(){
printf("Hello world\n");
}
abc(){
void (*hw)(void);
hw = &hello;
hw();
}
}
int main()
{
abc ab;
return 0;
}
error: cannot convert ‘void (abc::*)()’ to ‘void (*)()’ in assignment
但以下代码适用于我的代码库。任何人都可以帮我找出差异吗?
void hello(){
printf("Hello world\n");
}
int main()
{
void (*hw)(void);
hw = &hello;
hw();
return 0;
}
答案 0 :(得分:4)
函数指针(不幸的是)与方法指针完全不同,因为错误试图指示。这是因为该方法所处理的对象需要以某种方式传递,这使得方法首先与函数根本不同(并且显然会影响通过指针进行调用的方式)。当多个/虚拟继承发挥作用时,方法指针甚至不总是相同的大小(并且可以比函数指针大得多)。
你需要声明一个方法指针,并使用一个深奥的.*
或->*
运算符代表一个正确类型的对象来调用它:
class abc {
public:
void hello(){
printf("Hello world\n");
}
abc() {
void (abc::*hw)();
hw = &abc::hello;
(this->*hw)(); // or (*this.*hw)()
}
}