靜態常量非整形成員變量的初始化問題
阿新 • • 發佈:2017-11-21
註意 ons 不能 con cnblogs c++ 文件 靜態數據成員 無法
在C++的編譯器中只允許靜態常量整型變量直接在類聲明中賦值,除此之外的任何變量類型都不可以。而且靜態量只是聲明的話是無法使用的,必須在cpp文件中初始化才可以。常量(整型或者非整形)要在類的構造函數之後用“:”來聲明,具體格式如下:
Gasproperty::Gasproperty( void)
: P(0)
, T(0)
, phi(0)
{
}
對靜態變量有兩種初始化方式。第一可以在單獨的靜態函數中進行賦值。第二在類的定義文件(cpp)中,以如下方式初始化:
double Gasproperty::Ra= 287.06;
註意之前沒有const標識符。而靜態常量則只有第二種初始化方法,即
const double Gasproperty::Ra= 287.06;
註意之前有const標識符。該常量在類中的聲明方式是:
static const double Ra;
在普通的項目文件中這樣做就可以。但是在動態鏈接庫項目中就會有點不同。如果按照“DLL編寫經驗”中的方法來編寫DLL即添加了定義語句
#ifdef CLASS _API
#define CLASS_API _declspec(dllexport )
#else
#define CLASS_API _declspec(dllimport )
#endif
不知到為什麽總會顯示 “不允許 dllimport
靜態數據成員 的定義”,而實際上我們只聲明了_declspec(dllexport )
。這個時候就要對以上的聲明語句作出修改。用
#define CLASS_API _declspec(dllexport )
來替換上面的定義語句。總之,不能出現dllimport的定義。我個人認為這是編譯器的問題。但這樣同樣也有限制,我們聲明的Ra變量必須是private
屬性的,必須通過成員函數調用才可行。如果聲明為public
,雖然編譯成功但是仍熱無法直接調用。
靜態常量非整形成員變量的初始化問題