假设有两个函数:
1. void fun();
2.class FUNCTION{
public:
void fun();
}Fun1;
当设有函数指针
a.void (*p) ();
b. p = fun;
(*p)(); //能正常使用
p = Fun1.fun; //系统会报错
原因是指针变量的赋值必须要满足一下3点:
1.赋值符号两侧的函数参数的类型与参数个数需要相同;
2.赋值符号两侧的函数返回值的类型要匹配;
3.赋值符号两侧的类要相同;
b点的错误就是第3点不满足,p与Fun1.fun不属于同一个类
只要将p的定义改成
void (FUNCTION:: *p)();
p的赋值改为
p = &FUNCTION::fun();(注意FUNCTION::fun()与FUNCTION.fun()的区别)