从成员函数传递函数指针

时间:2013-08-28 18:52:11

标签: c++

我正在尝试使用代码段并在VS2010上遇到以下错误。

Error   1   error C2276: '&' : illegal operation on bound member function expression    Line 19

以下是我的代码:

#include<iostream>
using namespace std;
class a
{
public:
    void add(int x)
    {
        cout<<x+x<<endl;
    }
    void mult(int x)
    {
        cout<<x*x<<endl;
    }
    typedef void (a::*fptr)(int);
    fptr retFuncP(char ch)
    {
        if(ch=='+')
        {
            return &add;
        }
        else
        {
            return &mult;
        }
    }
};
int main()
{
    a objA;
    void (a::*fptr)(int) = objA.retFuncP('+');
    (objA.*fptr)(3);
    cin.ignore();
}

使用void (a::*retFuncP(char ch))(int x)作为替代方案也无法解决问题。这个似乎有什么不对?

1 个答案:

答案 0 :(得分:2)

您需要使用&a::add代替&add,因为add是成员函数。与&mult相同,需要&a::mult。请参阅demo这些修补程序。