头文件中变量如果没有初始化就是声明;初始化了就是定义。在C++语言中,变量有且只能有一次定义,但是可以声明多次,使用变量前必须定义或声明。
再说到这些变量的声明与定义前,要知道这些变量的链接性:
外部全局变量 外部连接性 可以被extern
静态全局变量(static) 内部连接性 不能被extern
常全局变量(const) 内部连接性 在之前加上extern就变成了外部连接性,就可以被其他的文件extern了
声明:(可以放在头文件)没有开辟内存的定义,类型定义,比如类的定义,结构体的定义,它是定义一个数据类型而已;
定义:(不可放在头文件)开辟了内存的定义,数据定义,比如类对象定义,变量定义。
一般来说:
不分配内存的,放在头文件
分配内存的放在cpp文件,防止重复定义,当然也要看变量的连接性,内部连接性的可以放在头文件定义。
变量、函数、类,在使用之前都必须声明,包含头文件,如果a.h包含了b.h,在a.h里面就对b.h里面的声明重新声明了,这也是不能在头文件里面定义变量与函数的原因(防止重复定义),当然内部链接性的变量和内联函数除外。
C++是不允许在头文件里定义一个外部全局变量(声明可以,比如在源文件定义,在头文件extern声明,像int a;这样不算声明,是