c++静态变量与菲静态变量
2013-11-10 23:06
155 查看
刚开始用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; //不报错了
}
文件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; //不报错了
}
相关文章推荐
- 【Java 基础】Java 局部变量、实例变量、类变量(静态变量)区别
- PHP面向对象静态变量
- 静态函数 访问非静态变量 可以模仿 传递this指针
- 全局变量、局部变量、全局静态变量、局部静态变量的区别
- 前端PHP入门-016-静态变量
- Spring如何注入静态变量
- 变量定义、变量声明、全局变量、静态变量、局部变量。
- JNI获取并修改Java中类的变量和静态变量的值
- 测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
- C Primer Plus 第12章 12.4 随机数函数和静态变量
- C++静态变量
- 关于OBJC的静态变量
- C++类的静态变量的初始化
- 静态方法和静态变量 被继承
- C++11(一):在类的定义时初始化非静态变量
- C++类中静态变量和静态方法使用介绍
- static 静态变量
- 单例模式与静态变量在PHP中
- [转]java中静态变量和静态方法分别有什么特点?