C++模板和派生类成员初始化
C++ Templates and Derived Classes Member Initialization
我试图在派生类构造函数中初始化基类的一个成员。
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
您尝试使用将访问权限从受保护更改为公用,但没有更改此常规规则。创建适当的基类构造函数,并在派生类中将初始化程序传递给它。
相关文章:
- C++成员初始化
- c++构造函数成员初始化:传递参数
- C++正确的指针成员初始化
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- WinLamb 错误:成员初始化非法
- 使用其他成员初始化结构的成员?
- C++模板类静态成员初始化
- 解释了构造函数成员初始化列表
- 如何在成员初始化列表中声明共享指针
- C++入门5版:使用get成员初始化另一个与shared_ptr无关的对象
- C++11 默认类成员初始化与初始值设定项列表同时
- 调用非默认构造函数作为成员初始化
- C++模板成员初始化:用右值移动构造,但用左值移动引用
- 类成员初始化C++
- 在成员初始化列表中,我可以创建对列表中不在列表中的成员变量的引用
- C :(不重复)积分静态成员初始化(不仅是声明!),导致链接器错误,原因
- 如何调用成员初始化器列表中参考成员的构造函数
- C 构造函数采用成员初始化器
- 与其他静态const成员初始化静态常量成员
- 静态内联成员初始化顺序