一个类中的c ++引用字段抛出构造函数

时间:2014-04-17 12:05:33

标签: c++ inheritance reference

我有这堂课:

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类中自动更改。

解决方案是什么? 感谢

3 个答案:

答案 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)

如果间接是有意的,那么使用指针。


一旦初始化,就无法引用其他内容。

这意味着引用成员通常禁止为类分配,并且无法通过赋值对其进行初始化。

相反,指针可以通过赋值指向其他位置。