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

這篇博客也很清晰

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