1. 程式人生 > >靜態常量非整形成員變量的初始化問題

靜態常量非整形成員變量的初始化問題

註意 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,雖然編譯成功但是仍熱無法直接調用。

靜態常量非整形成員變量的初始化問題