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

子类PetrolCar继承父类Car时构造函数编写触发编译错误的问题求助

子类PetrolCar继承父类Car时构造函数编写触发编译错误的问题求助

你好呀!看你这段代码的问题,其实是在子类构造函数的初始化列表里犯了两个小错误,才导致编译器报error: expected ‘)’ before ‘Brand’这个错的,我帮你拆解下:

首先先看你写的这段有问题的代码:

class PetrolCar : public Car{
public:
    Car(string Brand, string LicensePlate, uint16_t YearOfFabrication, double AverageConsumption, uint32_t NumberOfKilometers) : PetrolCar (string Brand, string LicensePlate, uint16_t YearOfFabrication, double AverageConsumption, uint32_t NumberOfKilometers)

错误原因分析:

  • 第一点:构造函数的定义对象搞反了
    你是在PetrolCar这个子类里写构造函数,但你把构造函数名写成了父类Car,这完全搞反了逻辑!应该是定义PetrolCar的构造函数,然后在初始化列表里调用父类Car的构造函数,来完成父类成员的初始化。
  • 第二点:初始化列表传参不能重复写类型
    你在初始化列表里调用PetrolCar(...)时,给每个参数都加了类型(比如string Brand),这是语法错误——传参的时候只需要写参数名就行,不需要再声明类型,编译器因为这个错误找不到正确的括号匹配,才会报出expected ‘)’ before ‘Brand’的提示。

正确的写法示例:

// 先确保父类Car已经正确定义了对应构造函数
class Car {
public:
    Car(string Brand, string LicensePlate, uint16_t YearOfFabrication, double AverageConsumption, uint32_t NumberOfKilometers) {
        // 父类构造函数的实现逻辑
    }
};

class PetrolCar : public Car {
public:
    // 定义子类PetrolCar的构造函数,参数列表可与父类一致(也可按需添加子类专属参数)
    PetrolCar(string Brand, string LicensePlate, uint16_t YearOfFabrication, double AverageConsumption, uint32_t NumberOfKilometers)
        // 初始化列表里调用父类Car的构造函数,仅传入参数名即可
        : Car(Brand, LicensePlate, YearOfFabrication, AverageConsumption, NumberOfKilometers) {
        // 子类自身的构造逻辑(如果有需要的话)
    }
};

简单总结下核心逻辑:子类构造函数必须以自己的类名命名,然后在初始化列表里通过父类名(参数列表)的方式调用父类构造函数,传参时只用写已经声明过的参数名,不用重复加类型。

这样修改之后,那个编译错误应该就消失啦!

备注:内容来源于stack exchange,提问作者Smarandache Felix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:28:13