美文网首页
类外函数指针调用类成员变量错误

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

作者: shasha075 | 来源:发表于2018-07-29 22:28 被阅读0次

    问题代码如下:
    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等函数修改为静态函数即可。

    相关文章

      网友评论

          本文标题:类外函数指针调用类成员变量错误

          本文链接:https://www.haomeiwen.com/subject/naitvftx.html