静态常量非整形成员变量的初始化问题

在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,虽然编译成功但是仍热无法直接调用。

posted @ 2017-11-20 21:28  上官栋  阅读(606)  评论(0编辑  收藏  举报