C ++模板和派生类成员初始化

时间:2014-09-01 14:19:08

标签: c++ templates inheritance

我正在尝试在派生类构造函数中初始化基类的成员。

template <typename T, int D>
class BaseClass {
    // ...
protected:
    T values[D];
};

template<typename T>
class DerivedClass : public BaseClass<T, 3> {
public:
    using BaseClass<T, 3>::values;

    DerivedClass(T a, T b, T c) : values{a, b, c} {}
};

但是我得到了这个:

error: 'using BaseClass<T, 3>::values' is not a non-static data member of 'DerivedClass<T>'
  DerivedClass(T a, T b, T c) : values{a, b, c} {}
                                ^

为什么不允许这样做?

另外,我可以在构造函数体中指定值,但我将无法再使用初始化列表。

1 个答案:

答案 0 :(得分:1)

您无法在派生类构造函数中直接初始化基类成员。 using您尝试使用从受保护到公共的更改访问权限,但不会更改此常规规则。创建适当的基类构造函数,并在派生类中将初始化器传递给它。