从成员函数传递函数指针

Passing function pointer from member function

本文关键字:指针 传递函数 函数 成员      更新时间:2023-10-16

我在尝试一个代码片段时,在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)作为替代方案也没有解决问题。这里面好像出了什么问题?

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