类外函数指针调用类成员变量错误

问题代码如下:
1.类外定义了一个函数指针:typedef int (*pCalcuFun)(int , int);
2.设计一个calculate类,如下所示,结果编译出现如下错误:
error: reference to non-static member function must be called
pCalculateFunc = add;
^~~


typedef int (*pCalcuFun)(int , int);

class cCalculate
{
public:
    ...
    int add(int a, int b)        //修改为静态函数
    {
        return a + b;
    }
    int sub(int a, int b)
    {
        return a - b;
    }
    ...

    int calculate_exp()
    {
        ...
        while(false == rslt_stack.empty())
        {
            ...
                switch(ele_struct.ele_type.ele)
                {
                case '+':
                    pCalculateFunc = add;
                    break;
                ...
                default:
                    return 0;
                }
                sum = pCalculateFunc(a, b);
                tmp_stack.push(sum);
            }
        }
        return sum;
    }
};

从错误信息看,仿佛是调用了非静态函数,而实际原因如下:
由于add等函数是在类中定义的函数,表面上看是2个入参和类外声明的函数指针参数相同,而实际上,类中的add等函数存在3个参数,因为我们普遍的类成员函数均隐含了一个this指针,因此该出修改,则需要将add等函数修改为静态函数即可。

你可能感兴趣的:(类外函数指针调用类成员变量错误)