求助:C++编译报错no matching function for call to 'WidgetBridge::WidgetBridge()'
解决C++编译错误:no matching function for call to 'WidgetBridge::WidgetBridge()'
嘿,刚学C++两周就敢上手类相关的代码,已经超棒啦!咱们来拆解一下你遇到的这个编译错误,其实它的本质很简单,就是编译器找不到能用来初始化WidgetBridge对象的默认构造函数。
错误原因
在C++里,当你像这样在Room类里声明一个WidgetBridge类型的成员变量:
class Room { private: WidgetBridge bridge_thermostat; // ... };
编译器会自动尝试调用WidgetBridge的默认构造函数(也就是不带任何参数的构造函数)来初始化bridge_thermostat。但如果你的WidgetBridge类只定义了带参数的构造函数,完全没写默认构造函数,编译器就找不到对应的函数,于是就抛出这个错误啦。
几种解决方案
根据你的需求,你可以选下面其中一种方法来解决:
给WidgetBridge添加默认构造函数
如果你希望WidgetBridge可以被无参数初始化,直接在类里加一个空的或者带默认逻辑的默认构造函数就行:class WidgetBridge { public: // 默认构造函数 WidgetBridge() { // 这里可以写初始化逻辑,比如给成员变量设默认值 } // 你原来的带参数构造函数 WidgetBridge(int someValue) { // ... } };在Room的构造函数初始化列表里显式调用WidgetBridge的带参构造
如果WidgetBridge必须用特定参数来初始化,那你得在Room的构造函数里,用初始化列表的方式指定调用WidgetBridge的带参数构造函数:class Room { private: WidgetBridge bridge_thermostat; public: // 用初始化列表传递参数给WidgetBridge的构造函数 Room() : bridge_thermostat(42) { // 这里的42替换成你需要的实际参数 // Room构造函数的其他逻辑写在这里 } };
小提示
刚学C++的时候要记住:类的成员变量是在构造函数的函数体执行之前就完成初始化的,所以不能在函数体里直接“初始化”成员变量(那其实是赋值),必须通过默认构造或者初始化列表来完成真正的初始化哦。
内容的提问来源于stack exchange,提问作者Wolph42
相关产品推荐
相关产品推荐

