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下不會出現該問題.