VS2008編譯環境下全局const變量在其他編譯模塊中引用注意的問題

2012/2/13

By RaySaint


在VS2008中編寫C++程序時碰到如下問題:

main.cpp中聲明瞭一個全局const變量:
//! main.cpp
...
const int a = 10;
...


接着在某個類的實現文件中,如consumerthread.cpp中定義的某個成員函數內部使用的該變量(當然,先在該文件頭部extern聲明該變量)
//consumerthread.cpp

...
extern int a;
 
void ConsumerThread::run()
{
     cout << "a=" << a << endl;
}

雖然上述代碼編譯可通過,但在鏈接時會報錯提示找不到const int a的定義。

原因:
在C++中當一個全局變量聲明爲const時,默認情況下爲文件內鏈接,也就是說:
const int a = 10;
相當於
static const int a = 10;

因此,需要顯示的告訴編譯器你所聲明的全局const變量是外部存儲的:
//! main.cpp
...
extern const int a = 10; //正確!
...
 
P.S. 經同學驗證,gcc下不會出現該問題.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章