我有一個static unsigned long gVar;
這是全局在server.cc文件中聲明。
但是當我嘗試使用extern unsigned long gVar;
其他文件中使用它,它給了錯誤:無法解析的外部符號「無符號長gVar」
unresolved external symbol "unsigned long gVar"
。你能告訴我如何extern一個靜態變量,因爲我能夠從這個文件中除了這個外部其他變量。
我有一個static unsigned long gVar;
這是全局在server.cc文件中聲明。
但是當我嘗試使用extern unsigned long gVar;
其他文件中使用它,它給了錯誤:無法解析的外部符號「無符號長gVar」
unresolved external symbol "unsigned long gVar"
。你能告訴我如何extern一個靜態變量,因爲我能夠從這個文件中除了這個外部其他變量。
您不能一起使用static
和extern
。
如果您想在其他文件中使用該變量,只需刪除static
並將其聲明爲extern
即可。
爲什麼不能一起使用static
和extern
?
static
意味着內部聯動,而extern
意味着外部聯動。
內部鏈接意味着符號只有在它被宣佈爲翻譯單元訪問,而外部鏈接意味着符號應在所有文件可見進行的跨項目,顯然,他們是相互排斥的。
那麼,在命名空間範圍內定義爲static T x;
的對象只能在定義文件的本地可見。實際上,這正是使用static
關鍵字(在名稱空間級別)的功能。只要刪除static
。
你應該提到靜態在不同的上下文中有不同的含義...... – 2012-02-09 06:50:26
@DanO:我的回答只是想解釋實際問的Q,即:*爲什麼static變量不能聲明爲extern? *我不打算通過添加重要的細節來混淆它,但與Q中的Q無關。 – 2012-02-09 06:58:30
但是他沒有區分靜態局部靜態成員和靜態成員,這會在問題和答案中留下一些模糊性。 – 2012-02-11 19:30:03