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

C++如何继承构造函数?子类Chose实例化报错求助

问题原因分析

编译错误的核心原因是:

  • 你为Character类定义了带参数的构造函数,C++编译器会停止自动生成无参的默认构造函数。
  • 派生类Chose没有显式定义构造函数时,编译器会自动生成它的默认构造函数,这个自动生成的构造函数会尝试调用基类Character的默认构造函数,但基类不存在这个构造,因此触发编译错误。
解决方案

根据你“复制选中的Character对象”的需求,最合理的做法是给Chose类添加一个接收Character对象的构造函数,显式调用基类的拷贝构造函数来完成基类部分的初始化:

修改Chose类的代码:

class Chose : public Character{
public:
    // 接收一个Character对象,调用基类的拷贝构造初始化基类成员
    Chose(const Character& src) : Character(src) {}
};

然后在main函数中,你可以通过传入已有的角色对象来创建Chose实例,比如选中战士:

Chose that(warrior);

如果你确实需要Chose支持无参构造,那可以给Character类手动添加默认构造函数:

class Character {
    public:
        string weapon;
        float HP;
        float MP;
        float str;
        float def;

        // 手动添加默认构造函数
        Character() : weapon(""), HP(0), MP(0), str(0), def(0) {}

        Character(string aweapon, float aHP, float aMP, float astr, float adef){
            weapon = aweapon;
            HP = aHP;
            MP = aMP;
            str = astr;
            def = adef;
        }
};

但这种方式不符合你“复制选中对象”的需求,仅作为补充场景的解决方案。


内容的提问来源于stack exchange,提问作者jad123xp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:46:04