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
相关产品推荐
相关产品推荐

