参考资料:声明、定义、初始化、赋值的区别
C++使用非常量静态成员(non-const static data member)
误区一:将非常量静态成员放到private里
静态成员只跟类有关,是所有对象共有的属性,如果在类中初始化则意味着每个对象都初始化一次,这样就需要非静态成员了。非常量静态成员函数不可以在类中初始化,一定要在类外把类名作为命名空间而初始化,但放在private里又只能在类里初始化,这种操作是无法实现的。但C++支持在类里定义非常量静态成员函数,如”static double average(){…};”。
误区二:在函数体内对非常量静态成员变量初始化。(xcode有提示)正确的方法是将初始化语句放到函数体外定义(在类中只有声明),然后在函数内以class::member的方式调用。
综上,非常量静态成员变量需要在类的public中声明,在函数体外类外定义,以classname::member的方式使用。