C++编译报错:无匹配的函数调用'car::car()'是什么原因?
错误产生原因
- C++类的核心规则:当你显式定义了带参数的构造函数后,编译器不会再自动生成默认的无参构造函数。
- 你的代码中两处调用了不存在的无参构造函数:
add成员函数内的car temp;main函数内的car o3;
这两处都尝试调用car::car()无参构造,但是该函数不存在,因此抛出匹配失败的错误。
修复方案
推荐两种可行的修复方式,可按需选择:
方案1:补充定义无参构造函数
直接在car类的public区域添加无参构造即可:
#include<iostream> using namespace std; class car { private: int a,b; public: // 新增无参构造函数 car(){} car(int x,int y) { a=x; b=y; } void showdata() { cout<<a<<" "<<b<<endl; } car add(car c) { car temp; temp.a = a*c.a; temp.b = b*c.b; return temp; } }; int main() { car o1(3,5); car o2(0,7); car o3; o3=o1.add(o2); o1.showdata(); o2.showdata(); o3.showdata(); }
方案2:调整对象创建逻辑,全程使用已有的带参构造(更推荐)
不需要新增无参构造,直接优化对象初始化逻辑,避免调用无参构造:
#include<iostream> using namespace std; class car { private: int a,b; public: car(int x,int y) { a=x; b=y; } void showdata() { cout<<a<<" "<<b<<endl; } car add(car c) { // 直接用计算结果初始化temp,调用带参构造 car temp(a*c.a, b*c.b); return temp; } }; int main() { car o1(3,5); car o2(0,7); // 直接用add的返回值初始化o3,不需要先声明再赋值 car o3 = o1.add(o2); o1.showdata(); o2.showdata(); o3.showdata(); }
内容的提问来源于stack exchange,提问作者AK d
相关产品推荐
相关产品推荐

