c ++类中的函数指针

时间:2014-05-27 15:59:06

标签: c++ function-pointers

我试图在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;
}

1 个答案:

答案 0 :(得分:4)

函数指针(不幸的是)与方法指针完全不同,因为错误试图指示。这是因为该方法所处理的对象需要以某种方式传递,这使得方法首先与函数根本不同(并且显然会影响通过指针进行调用的方式)。当多个/虚拟继承发挥作用时,方法指针甚至不总是相同的大小(并且可以比函数指针大得多)。

你需要声明一个方法指针,并使用一个深奥的.*->*运算符代表一个正确类型的对象来调用它:

class abc {
public:
    void hello(){
        printf("Hello world\n");
    }   
    abc() {
        void (abc::*hw)();
        hw = &abc::hello;
        (this->*hw)();  // or (*this.*hw)()
    }
}