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

C++ Templates and Derived Classes Member Initialization

本文关键字:成员 初始化 派生 C++      更新时间:2023-10-16

我试图在派生类构造函数中初始化基类的一个成员。

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} {}
                                ^

为什么不允许这样做?

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

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