从派生类构造函数初始化受保护的数据成员

Initialise protected data members from derived class constructor

本文关键字:受保护 数据成员 初始化 构造函数 派生      更新时间:2023-10-16

我正在重新学习c++,并试图在这里写一个程序。

class Quad{
public:
Quad(){}
protected:
vec _topLeft, _topRight, _bottomLeft, _bottomRight;
};
class IrregularQuad : public Quad{
public:
IrregularQuad(vec topLeft, vec topRight, vec bottomLeft, vec bottomRight)
: _topLeft(topLeft), _topRight(topRight), _bottomLeft(bottomLeft), _bottomRight(bottomRight)
{}
};

我得到一个编译错误对上述派生类承包商说:成员初始化器_topLeft没有命名非静态数据成员或基类(其他成员也有类似的错误)

我不知道出了什么问题。是不是我不能初始化受保护的成员使用初始化列表之类的?

是我不能使用初始化列表或其他东西初始化受保护的成员?

。只有类自己的成员可以在构造函数初始化列表中初始化(当然,你可以在构造函数体中给它们赋值)。首先初始化基子对象。

你需要以某种方式将工作委托给基类的一个构造函数:

class Base {
    explicit Base(int i) : m(i)
    {}
protected:
    int m;
};
class Derived : public Base {
    explicit Derived(int i) : Base(i)
    { }
};

不能在派生类的初始化列表中初始化基类成员。您可以添加一个构造函数Quad为你这么做,或者你可以设定他们自己的身体派生类的构造函数。

这是错误C2614的重复:':非法成员初始化:'不是基或成员

只能在初始化器列表中初始化成员或基类。