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 C2662: “Screen::move”: 不能将“this”指针从“const Screen”转换为“ Screen &” 转换丢失限定符
下一篇:与复制构造函数相关的错误.例如:0x77D9FCAA (ntdll.dll) (prog31.exe 中)处有未经处理的异常: 0xC0000374:堆已损坏。 (参数: 0x77DC6668)