bug记录——头文件中的全局变量xxx重复定义

在多个cpp文件中都要访问main.h中的全局变量,所以在main.h中添加了

A a;的定义。在不同的源文件中向a的各成员变量赋值。

但是在没加static关键字时,编译一直报a变量在多个源文件中重复定义的错误。

起初以为是因为main.h被多个源文件包含,所以重复包含的原因。但在main.h中添加只编译一次的语句后仍出现上述错误。

加上static关键字后正常编译。

网上搜了一篇博客解答了疑问:

https://www.cnblogs.com/zplutor/archive/2011/08/06/2129401.html

摘抄几句话:

定义全局变量时使用static,意味着该变量的作用域只限于定义它的源文件中,其它源文件不能访问。既然这种定义方式出现在头文件中,那么可以很自然地推测:包含了该头文件的所有源文件中都定义了这些变量,即该头文件被包含了多少次,这些变量就定义了多少次。

假如将static去掉,编译的时候就会出现变量重定义的错误,因为没有static的话变量的作用域是全局的,定义了两个以上的同名变量就会出现该错误。

但是Static变量在多个不同的源文件中对应的其实是多个不同的变量,并非同一个变量

 

正确的方法是在头文件中用extern 关键字定义该变量,使得多个源文件访问的是同一个变量。

https://blog.csdn.net/qq_32115101/article/details/79986844

这篇博客也很清晰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章