2012-02-09 172 views
0

我有一個static unsigned long gVar;這是全局在server.cc文件中聲明。
但是當我嘗試使用extern unsigned long gVar;其他文件中使用它,它給了錯誤:無法解析的外部符號「無符號長gVar」

unresolved external symbol "unsigned long gVar"。你能告訴我如何extern一個靜態變量,因爲我能夠從這個文件中除了這個外部其他變量。

回答

4

您不能一起使用staticextern
如果您想在其他文件中使用該變量,只需刪除static並將其聲明爲extern即可。

爲什麼不能一起使用staticextern

static意味着內部聯動,而extern意味着外部聯動。

內部鏈接意味着符號只有在它被宣佈爲翻譯單元訪問,而外部鏈接意味着符號應在所有文件可見進行的跨項目,顯然,他們是相互排斥的。

+0

你應該提到靜態在不同的上下文中有不同的含義...... – 2012-02-09 06:50:26

+1

@DanO:我的回答只是想解釋實際問的Q,即:*爲什麼static變量不能聲明爲extern? *我不打算通過添加重要的細節來混淆它,但與Q中的Q無關。 – 2012-02-09 06:58:30

+0

但是他沒有區分靜態局部靜態成員和靜態成員,這會在問題和答案中留下一些模糊性。 – 2012-02-11 19:30:03

1

那麼,在命名空間範圍內定義爲static T x;的對象只能在定義文件的本地可見。實際上,這正是使用static關鍵字(在名稱空間級別)的功能。只要刪除static