-1

我正在尝试一个代码片段,并在 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)也没有解决问题。这似乎有什么问题?

4

1 回答 1

2

您需要使用&a::add而不是&add,因为add它是一个成员函数。与&multwhich 需要相同&a::mult。请参阅带有这些修复程序的演示。

于 2013-08-28T18:58:55.253 回答