C++的头文件中不应该有定义,只能有声明,特别是设计到变量的定义时,变量只能在某个CPP文件中定义,不能在h文件中定义,在h文件中定义的后果是这个h文件只能被一个cpp文件包含。
//dc。H文件
Extern int gl_counter;
//main.cpp文件
#incude”dc.h”
Int gl_counter;
//fun.cpp
#incllude”dc.h”
Void f()
{
***************
Gl_counter
***************
}
注意全局变量在cpp文件中只能且必须被定义一次。H文件中的extern ****只是声明,不是定义。定义的语义动作是要给变量分配存储空间。
C++的编译是分别对每个编译单位进行编译生成,obj的二进制文件,然后链接各个编译模块形成的obj生成可执行模块。
如果将变量的定义放在h头文件中那么在编译时没有错误,而在链接时侧会出现链接错误,这种错误微软的编译器有时会发现有时不会发现(如果选用rebuild all选项进行编译那么一定会发现重复定义),而在linux下用g++则一定会发 现,这可能是linux下没有用到增量编译的技术。