子类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
相关产品推荐
相关产品推荐

