访问其他文件中的变量

如下图,在此头文件中定义一个全局变量:

然后在另一个文件里使用它:

会报“重复定义”的错:

查看编译输出:

这两个文件都生成了.o文件,也就是编译没问题,问题出在链接的时候。

出现此问题的原因是这两个文件是分开编译的,main.cpp文件包含(include)了<widget.h>文件,在编译器预处理时会将#include指令指定的头文件包含进来,也就是编译前main.cpp里面包含了一份<widget.h>文件的拷贝副本,没有语法错误则编译没问题,每个文件编译后会生成独立的标识符和符号表。在链接的时候,会将工程中所有的符号整合在一起,由于文件中有重复的变量,即报错。

解决此问题方法:

1、变量改成static变量;

2、.h中使用extern声明变量,在<widget.cpp>中定义,这样因为main.cpp中只包含了<widget.h>文件,<widget.h>中没有定义变量自然也谈不上“重复定义”的问题了(一个变量可以声明多次但只能定义一次)。

猜你喜欢

转载自blog.csdn.net/kenfan1647/article/details/114241662