如何在非模板类成员变量中调用其模板基类的构造函数?
问题解决方法
编译报错的核心原因是:Class1没有定义接受数值参数的构造函数,编译器仅为其自动生成了默认构造函数和拷贝构造函数。当你在Class3的初始化列表中尝试用64初始化m_Class1Obj时,编译器会尝试匹配拷贝构造函数,而int类型无法直接转换为const Class1&,因此触发C2664错误。
以下是两种可行的解决方式:
方式一:让Class1继承基类的构造函数
在Class1的类定义中添加构造函数继承声明,直接复用基类ClassTemplate<BYTE>的构造函数:
class Class1 : public ClassTemplate<BYTE> { public: // 继承基类的所有构造函数 using ClassTemplate<BYTE>::ClassTemplate; };
这样Class1就拥有了和基类一致的构造函数,Class3中的初始化代码m_Class1Obj(64)就能正常编译,直接调用基类的带参构造函数初始化m_Val。
方式二:为Class1显式定义带参构造函数
如果不想继承基类所有构造函数,可以为Class1单独定义接受数值参数的构造函数,手动调用基类构造函数完成初始化:
class Class1 : public ClassTemplate<BYTE> { public: Class1(unsigned int val) : ClassTemplate<BYTE>(val) {} };
修改后Class3的初始化代码无需改动,即可正常调用Class1的带参构造函数,间接完成基类成员m_Val的赋值。
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

