读书人

指针调用类中的静态函数的有关问题 百

发布时间: 2012-02-24 16:30:38 作者: rapoo

指针调用类中的静态函数的问题 百思不得其解!!!!
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, 和普通函数一样

读书人网 >C++

热点推荐