来自:http://blog.youkuaiyun.com/gdczcjf/article/details/7437830
刚开始用C++写程序,遇到了一个很奇怪的问题,就是在类定义的面定义了一个静态成员变量,但在使用时编译器报错称变量不是类的成员。
文件a.h内容:
- /**********************A.h****************************/
- #define A_H
- class A
- {
- static int num1;
- int num2;
- A();
- }
- #endif
文件a.c内容:
- /**************************a.c**************/
- #include "a.h"
- void A::A()
- {
- num2=1;//正确
- num1=2;//报错
- }
编译 错误:undefined reference to `A::num2'。
问题分析,对于a.h中的内容是不分配存储空间的,只是向编译器作出声明。对于num2,他是在实例化时分配内存的,而num1是一个静态成员,他在是在定义时就分配空间。
num1=2;之所以会报错就是我们还没有定义,没有为他分配空间。
- /**********************A.h****************************/
- #define A_H
- class A
- {
- static int num1;//这里只是声明,并没有定义
- int num2;//声明,在实例化时分配内存
- A();
- }
- #endif
- /**************************a.c**************/
- #include "a.h"
- int A::mun1;//定义,分配内存,以后A每一个对象(实例)的创建都不再分配内存
- void A::A()
- {
- num2=1;
- num1=2; //不报错了
- }
本文探讨了C++中静态成员变量的定义与使用问题,分析了为什么在类定义中声明静态成员变量后,直接在类实现文件中使用会导致编译错误,并给出了正确的定义与初始化方法。
3214

被折叠的 条评论
为什么被折叠?



