静态常量非整形成员变量的初始化问题
Posted 上官栋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态常量非整形成员变量的初始化问题相关的知识,希望对你有一定的参考价值。
在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
,虽然编译成功但是仍热无法直接调用。
以上是关于静态常量非整形成员变量的初始化问题的主要内容,如果未能解决你的问题,请参考以下文章
C++中静态成员变量(不支持在类定义中初始化不是常量的静态数据成员)
| 9 |错误:无效使用非静态数据成员'Matrix :: row'| 9 |错误:数组绑定不是']'令牌之前的整数常量|