刚开始用C++写程序,遇到了一个很奇怪的问题,就是在类定义的面定义了一个静态成员变量,但在使用时编译器报错称变量不是类的成员。

文件a.h内容:

 
  1. /**********************A.h****************************/  
  2. #define A_H  
  3. class A  
  4. {  
  5.     static int num1;  
  6.     int num2;  
  7.     A();  
  8. }  
  9.   
  10. #endif  

 

文件a.c内容:

 
  1. /**************************a.c**************/  
  2. #include "a.h"  
  3. void A::A()  
  4. {  
  5.     num2=1;//正确  
  6.     num1=2;//报错  
  7. }  

编译 错误:undefined reference to `A::num2'。

 

问题分析,对于a.h中的内容是不分配存储空间的,只是向编译器作出声明。对于num2,他是在实例化时分配内存的,而num1是一个静态成员,他在是在定义时就分配空间。

num1=2;之所以会报错就是我们还没有定义,没有为他分配空间。

 
  1. /**********************A.h****************************/  
  2. #define A_H  
  3. class A  
  4. {  
  5.     static int num1;//这里只是声明,并没有定义  
  6.     int num2;//声明,在实例化时分配内存  
  7.     A();  
  8. }  
  9.   
  10. #endif  
 
    1. /**************************a.c**************/  
    2. #include "a.h"  
    3. int A::mun1;//定义,分配内存,以后A每一个对象(实例)的创建都不再分配内存  
    4. void A::A()  
    5. {  
    6.     num2=1;  
    7.     num1=2; //不报错了  
    8. }  
posted on 2013-11-10 22:44  heidsoft  阅读(808)  评论(0)    收藏  举报