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

C++编译报错:无匹配的函数调用'car::car()'是什么原因?

错误产生原因
  • C++类的核心规则:当你显式定义了带参数的构造函数后,编译器不会再自动生成默认的无参构造函数。
  • 你的代码中两处调用了不存在的无参构造函数:
    1. add成员函数内的car temp;
    2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:48:03