c ++ Child class无法初始化Base类的成员变量?

时间:2014-07-21 20:07:07

标签: c++ vector constructor

所以这个问题增加了我之前关于在初始化列表中初始化成员向量的问题。

这是我的基础&派生类定义......

class Base {
public:
    std::vector<int> m_Vector;
}


class Derived : public Base {
    Derived() : m_Vector {1, 2, 3} {}      // ERROR when referring to m_Vector
}

尝试初始化Derived的m_Vector时...我在Visual Studio中收到错误说

"m_Vector" is not a nonstatic data member or base class of class "Derived"

为什么派生类在这种情况下不能引用m_Vector ..?

1 个答案:

答案 0 :(得分:0)

初始化后,可以在派生类构造函数中修改数据成员,但需要在基类中执行初始化。例如,

class Base 
{
public:
    std::vector<int> m_Vector;
    Base() : m_Vector {1, 2, 3} {} 
};

class Derived : public Base 
{

};

这是因为基类(以及扩展名,所有数据成员)在派生类及其任何成员之前初始化。

如果您需要能够从Base控制Derived数据成员的初始化值,您可以向Base添加合适的构造函数,并使用此功能在Derived

class Base 
{
public:
    std::vector<int> m_Vector;
    Base(const std::vector<int>& v) : m_Vector(v) {}
    Base(std::vector<int>&& v) : m_Vector(std::move(v)) {}
};

class Derived : public Base 
{
public:
  Derived() : Base({1, 2, 3}) {}

};