You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在非模板类成员变量中调用其模板基类的构造函数?

问题解决方法

编译报错的核心原因是: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:41:38