zoukankan      html  css  js  c++  java
  • 静态常量非整形成员变量的初始化问题

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

  • 相关阅读:
    关于MySql中的varchar类型
    分享15个HTML5工具
    MVC的路径查找顺序
    html5画布的旋转效果
    C#将集合快速排序
    一个不错的php验证码的类
    新学C++的for,switch和随机数
    高效率去掉js数组中重复项
    js带上框架和防止被iframe的代码
    请不要对我说“你要马上把这个小问题修改好”
  • 原文地址:https://www.cnblogs.com/sgdd123/p/7868349.html
Copyright © 2011-2022 走看看