Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;类中的引用字段抛出构造函数_C++_Inheritance_Reference - Fatal编程技术网

C++ c++;类中的引用字段抛出构造函数

C++ c++;类中的引用字段抛出构造函数,c++,inheritance,reference,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 Work

我有这门课:

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;
    }
.
.
.
}
我在构造函数中有这个错误

未初始化的引用成员“Worker::salary”[-fpermissive]

我想在
WSalary
class a字段(称为salary)中输入与class worker中的“salary”字段具有相同地址的内容。。因此,当我在工人类中更改工资时,它将在
WSalary
类中自动更改

解决办法是什么?
谢谢使用初始化列表:

WSalary(ID Id, Salary& Salary) : id(Id), salary(Salary)
{
}
WSalary(ID id, Salary& s) : id(id), salaray(s) {}
而不是

WSalary(ID Id, Salary& Salary) {
                 this->id=Id;
             this->salary=Salary;
}

在worker示例中,您试图将值绑定到非常量引用。这将创建一个悬而未决的引用,这不是一个好主意。只需在类中存储一个值而不是引用,或者传递一个引用作为构造函数参数,并使用初始化列表

WSalary
中,您需要使用初始化列表:

WSalary(ID Id, Salary& Salary) : id(Id), salary(Salary)
{
}
WSalary(ID id, Salary& s) : id(id), salaray(s) {}
或者调用基的构造函数(如果您将其修复为接受引用):

在C++11中,还可以使用以下语法在派生类中重复使用
Worker
构造函数:

using Worker::Worker;

如果间接寻址是有意的,则使用指针


一旦初始化,引用就不能引用其他内容

这意味着引用成员通常禁止类的赋值,并且不能通过赋值来初始化它


相反,指针可以通过赋值指向别处。

C++要求
const
reference
成员必须在构造函数初始化列表中初始化。你没有。作为一个参数,
Salary-Salary
不会带来任何好处,更不用说作为引用成员的有效初始值设定项了。
Worker
示例仍然是错误的。当我使用“WSalary(ID-ID,Salary&s):ID(ID),salaray(s){}”时,我得到了一个错误:“-class'WSalary'没有任何名为'Salary'的字段”,ID的字段也是如此。。。为什么?它应该从工人那里继承。。