我必须从.txt文件中读取行,并希望使用它初始化类的成员。行中的第一个字符始终是数字。
class myClass{
private:
const int ID;
public:
myClass(const int id){
this->ID = id;
}
};
这样做可以为构造函数提供“对于Kontakt :: ID不提供初始化程序”,对于this->ID = id;
来说,“表达式必须是可修改的Ivalue”
答案 0 :(得分:4)
您必须为此使用member initializer list:
myClass(const int id)
: ID(id) { }
答案 1 :(得分:4)
您必须在member initializer list中初始化const
类成员。这是一个完整的示例(请参见online):
class myClass {
private:
const int ID;
public:
myClass(const int id) : ID(id) {
// ^^^^^^
}
};
int main() {
myClass x(42);
}
问题在于构造函数主体中的初始化为时已晚,所有类作用域成员将在主体中的代码执行之前尝试进行初始化,并且const
类成员变量没有默认的初始化。
如果您确实想要默认的初始化,可以这样做(online示例):
class myClass {
private:
const int ID = -42; // <<<
public:
myClass() = default; // <<<
myClass(const int id) : ID(id) {
}
};
int main() {
myClass x;
}