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

来源:清泛原创     2016-10-24 17:25:18    人气:     我有话说( 0 人参与)

error C2758: ConstInit::cival: 必须在构造函数基 成员初始值设定项列表中初始化 prog28.cpp(12) : 参见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 构造函数 初始化

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: