原因:因为静态成员函数在类对象构造时没有分配this指针(非静态成员函数则具有this指针),相当于是全局函数,是属于类的,而类的成员变量只有类对象(实例)能够访问,成员变量只有实例化才有意义。
解决办法:静态成员函数增加一个类的指针或引用作为参数。如
class Foo
{
int m_f;
public:
static void f()
{
m_f=666; //这是非法的,这个等价于this->m_f=666,而静态方法没有this
}
static void f(Foo&a)
{
a.m_f=666; //这样就可以
}
};