首先,引用百度百科中extern关键字的解释:
【extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。】
我们只探讨前半部分,即【extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义】
假设你在头文件中声明了全局变量int global;,include了该头文件的cpp文件确实可以访问,前提是【只有一个cpp文件include了该头文件】,如果多个源文件中都包含了该头文件,这样的代码是【无法编译通过的】,编译器会报错:找到一个或多个多重定义的符号
报错原因简单来讲可以理解成:【每个cpp文件include的头文件,都等于是写在这个cpp里的代码】,如果是函数、类的声明则没问题(因为声明只说明了原型),但如果是定义(例如你的全局变量global)就会提示多重定义------这时编译器会认为你在两个cpp里分别定义了两个int global,而不是你想象的只有一个int global。
所以,综上所述,如果想在多个cpp中访问同一个全局变量,你的设想是行不通的,这时就要使用extern了。extern的作用是声明一个变量(前提是楼主需要理解声明和定义的区别),并且说明该变量的定义是在其他cpp文件中的,但真实的定义,必须还存在于某个cpp中(下面会说怎么做)。
所以,解决该问题的步骤如下:
1.在头文件中声明extern int global;
2.让所有需要访问该变量的cpp都包含该头文件
3.在任意一个cpp中中定义global(int global;)