继承类构造函数报错:Control_Reg_Value_HV无默认构造函数
问题解决:派生类构造报错“不存在Control_Reg_Value_HV的默认构造函数”
报错原因
C++中,当派生类构造函数未在初始化列表里显式调用基类构造函数时,编译器会自动尝试调用基类的默认构造函数(无参数版本)。但你仅给Control_Reg_Value_HV定义了带两个参数的构造函数,一旦显式定义了任何构造函数,编译器就不会自动生成默认构造函数,因此触发该报错。
两种解决方法
方法1:给基类添加默认构造函数
在Control_Reg_Value_HV类中补充无参数构造函数,可为成员变量设置默认初始值:
class Control_Reg_Value_HV{ public: // 添加默认构造函数 Control_Reg_Value_HV() : Control_Write_Value(0), Control_Store_Value(0) {} // 原有带参构造函数 Control_Reg_Value_HV(uint16_t Control_Write_Value_, uint16_t Control_Store_Value_); // 拷贝构造、赋值运算符、析构函数等原有成员 };
方法2:在派生类构造中显式调用基类带参构造
如果基类对象必须要有有效参数初始化,可在Data_SPI的构造初始化列表里,直接调用基类的带参构造函数并传入合适值:
class Data_SPI:public Control_Reg_Value_HV{ public: // 显式调用基类带参构造,示例传入0,0作为默认值 Data_SPI() : Control_Reg_Value_HV(0, 0), Resistance_Val_HV{10,11} {} private: uint16_t Resistance_Val_HV[200]; };
选择建议
- 若基类允许无参数初始化,方法1更简洁;
- 若基类的
Control_Write_Value和Control_Store_Value必须有有效值,方法2更安全,避免成员变量处于未定义状态。
内容的提问来源于stack exchange,提问作者Dean21
相关产品推荐
相关产品推荐

