指针调用类中的静态函数的问题 百思不得其解!!!!
class staticfunction
{
public:
……
static float average();//声明静态成员函数average
……
}
int main()
{
……
float (staticfunction::*s) = &staticfunction::average;//定义一个s指针指向类staticfunction的静态成员函数
average.
……
}
然后在编译的时候出现:
error C2440: '= ' : cannot convert from 'float (__cdecl *)(void) ' to 'staticfunction (__thiscall staticfunction::* )(void) '
1> There is no context in which this conversion is possible
然后如果我将s指向类中的普通(非静态函数)成员函数,则没有任何问题,但是指向静态成员函数,编译就通不过了,这是不是说明不能用指针直接指向类的静态成员函数呢?
想不明白,类中的静态成员函数是属于类的而非对象的,应该可一用指针调用的,为什么会这样?
高手能否给解释下?
[解决办法]
静态类成员函数的指针是普通类型指针!
float (*p)() = &staticfunction::average;
[解决办法]
非静态成员函数才需要 成员函数指针
静态的你就当 普通 函数处理就行了.
[解决办法]
float (staticfunction::*s) = &staticfunction::average;
====>
float (*s)()= &staticfunction::average;//定义一个s指针指向类
[解决办法]
类的非靜态成员函数编译器是需要重新改写的,以加入对this的支持
也就是说你看到的函数原型非不是最终的函数原型,所以它的指针就
还有另外一个特性,即它所属的类。
但是类的静态成员就不同,它没有this, 和普通函数一样