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


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

  • 相关阅读:
    noip模拟70
    noip模拟测试62
    noip模拟66
    noip模拟67
    noip模拟64
    QATF自动化测试框架
    自动化领域谁主沉浮
    TestComplete9.2增强支持 Embarcadero RAD Studio XE3、Ext JS
    QTP对SAP的支持
    如何将makefile构建的工程导入C++test?
  • 原文地址:https://www.cnblogs.com/sgdd123/p/7868349.html
Copyright © 2020-2023  润新知