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