首先提出一個問題
書上網都說變數加上static 後作用域就是當前文件,不加作用域就是整個項目
是否意味著加了static 的變數只能在本文件使用?
我用一個檔案用來存放全域變數,我需要在多處使用這個全域變數, 依照書上的說法應該是不加static的, 可是會出現
错误 LNK2005 1 "XXX" (XXX) 已经在 XXX
我加上 static 就沒有問題
我用的是 VS2017
求解釋這個問題, 我用這中方法存放全域可以嗎?
三叔2017-07-03 11:44:03
是否表示 加了static 的變數只能在本文件使用? 是的。
平常的程式碼全域變數想怎麼用就怎麼用,但是在實際專案中,全域變數是能不用就不用,記住這一點。所以你的「把所有全域變數放在一個檔案」這種做法不可取。
你的報錯應該是重定義了,全域變數在進行obj連結過程中出現重定義,因為全域變數是外部連結屬性,也就是對所有文件可見。
哪個文件需要這個變量,你可以使其static,如果其它文件需要這個變量的值,你可以把這個變量放進類中使其成為類靜態成員變量,然後直接include該文件,A::x 引用即可。