首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

指针调用类中的静态函数的有关问题 百思不得其解!

2012-02-24 
指针调用类中的静态函数的问题 百思不得其解!!!!classstaticfunction{public:……staticfloataverage()//声

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

热点排行