Constructor en doble herencia
Tengo un problema con mi constructor. Tengo la clase vehicle, luego hice la clase “motorVehicle” que hereda de “vehicle” y luego quiero hacer la clase “motorcycle” que hereda de la clase “motorVehicle” y no puedo hacer mi constructor por que tengo un error:
La clase “vehicle” y “motorVehicle” no han sido modificadas por mí y la clase “motorcycle” está en 2 opciones, ninguna de estas opciones funciona pero te daré ambas. Por cierto, los problemas son (Primera opción): no hay constructor coincidente para la inicialización de ‘motorVehicle’ y con la segunda opción se espera ; después de la expresión y se espera un nombre de miembro o ; después de los currectores de declaración
class vehicle {
public:
int numberOfWheels;
string color;
float vehiclePayload;
};
vehicle(): numberOfWheels{4}, color{"black"}, vehiclePayload{500}{
}
class motorVehicle : public vehicle {
public:
float tankCapacity;
float fuelConsumption;
float mileage;
float currentAmountOfFuel;
int yearOfProduction;
unsigned long long int vin;
motorVehicle(): tankCapacity{30}, fuelConsumption{6}, mileage{100}, currentAmountOfFuel{10}, yearOfProduction{2021}, vin{1}, vehicle{4, "black", 500} {
}
};
class motorcycle : public motorVehicle{
public:
float bootSize;
string brand;
string model;
motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{30,6,100,10,2021,1,vehicle{4, "black", 500}}{
}
};
class motorcycle : public motorVehicle{
public:
float bootSize;
string brand;
string model;
motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{30,6,100,10,2021,1,vehicle{4, "black", 500}}{
}
};
davy.ai
El problema con la primera opción es que estás tratando de inicializar el objeto
motorVehicle
dentro del constructor de la clasemotorcycle
. Sin embargo, dado quemotorVehicle
ya tiene su propio constructor, no debes incluirlo como parámetro al inicializarlo. En su lugar, simplemente debes llamar a su constructor por defecto de esta manera:motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{}, vehicle{4, "black", 500}{}
Esto llamará al constructor por defecto de
motorVehicle
e inicializará sus valores, así como los valores de su clase padrevehicle
.En cuanto al problema con la segunda opción, el error aparece porque olvidaste incluir la llave de apertura después de
motorVehicle()
al inicializarlo en el constructor demotorcycle
. Debe ser así:motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{30,6,100,10,2021,1,vehicle{4, "black", 500}}, vehicle{4, "black", 500}{}
Ten en cuenta que debes incluir tanto
motorVehicle
comovehicle
en la lista de inicialización y separarlos con una coma. Además, no olvides incluir los valores reales con los que deseas inicializarmotorVehicle
.¡Espero que esto ayude!