error C2758: “ConstInit::cival”: 必须在构造函数基/成员初始值设定项列表中初始化

清泛原创

error C2758: “ConstInit::cival”: 必须在构造函数基/成员初始值设定项列表中初始化
prog28.cpp(12) : 参见“ConstInit::cival”的声明

解决办法:类的成员可以在构造函数体类或者构造函数列表中初始化,但是某些类型,例如默认构造函数的类类型成员、const后者引用类型的成员则必须在构造函数初始化列表中进行初始化。例如:

//const成员初始化
class ConstInit {
public:
    ConstInit(int i,int j)
    {
       ival = i;
       cival = j;
       rival = ival;
    }
private:
    int ival;
    const int cival;
    int &rival;
};
int main(int argc, char *argv[])
{
    ConstInit ci;
}

这里引用类型rival以及const类型cival都没有在初始化列表中初始化,因此报错。解决办法就是在初始化列表中初始化这些特殊的类成员。如下例所示:

//const成员初始化
#include <iostream>
using std::cout;
class ConstInit {
public:
    ConstInit(int i=0):ival(i),cival(i),rival(i){}
private:
    int ival;
    const int cival;
    int &rival;
    //只要初始化表达式是一个常量,可以再定义体中进行初始化
    static const int period = 30;
public:
    static const unsigned int ARRAY[3];//静态常量数组
};
const unsigned int ConstInit::ARRAY[3] = {1,3,5};
int main(int argc, char *argv[])
{
    ConstInit ci;
    cout<<ConstInit::ARRAY[1];
}

error C2758 构造函数 初始化

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部