在多個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
這篇博客也很清晰