我有这堂课:
typedef int ID;
typedef int Salary;
class Worker {
protected:
ID id;
Salary& salary;
public:
Worker();
Worker(ID Id, Salary Salary) {
this->id=Id;
this->salary=salary;
}
。 。 。 }
和这一个:
class WSalary : public Worker {
public:
WSalary(ID Id, Salary& Salary) {
this->id=Id;
this->salary=Salary;
}
.
.
.
}
我在构造函数中有这个错误
未初始化的参考成员'工人::工资' [-fpermissive]
我想在WSalary
类中添加一个字段(称为薪水),该字段在字段中具有相同的地址" salary"在类worker中。所以当我更改worker类中的工资时,它会在WSalary
类中自动更改。
解决方案是什么? 感谢
答案 0 :(得分:1)
在您的worker示例中,您尝试将值绑定到非const引用。这将创建一个悬空参考,并不是一个好主意。只需在类中存储一个值而不是引用,或者将引用作为构造函数参数传递,并使用初始化列表。
在WSalary
中,您需要使用初始化列表:
WSalary(ID id, Salary& s) : id(id), salaray(s) {}
或者调用基类的构造函数(如果你修改它以接受引用):
WSalary(ID id, Salary& s) : Worker(id, s) {}
在C ++ 11中,您还可以使用以下语法在派生类中重用Worker
构造函数:
using Worker::Worker;
答案 1 :(得分:0)
使用初始化列表:
WSalary(ID Id, Salary& Salary) : id(Id), salary(Salary)
{
}
而不是
WSalary(ID Id, Salary& Salary) {
this->id=Id;
this->salary=Salary;
}
答案 2 :(得分:0)
如果间接是有意的,那么使用指针。
一旦初始化,就无法引用其他内容。
这意味着引用成员通常禁止为类分配,并且无法通过赋值对其进行初始化。
相反,指针可以通过赋值指向其他位置。