Нет конструктора по умолчанию?

#include <iostream>
using namespace std;

//To know the car's make, model, color, license number, and the number of minutes the car has been parked
class ParkedCar
{
string make, model, color, license_number;
int minutes;
public:
ParkedCar(string make = "...", string model = "...", string color = "...",
string license_number = "...", int minutes = 0) : make{ make }, model{model},
color{color}, license_number{license_number}, minutes{minutes} { this->make = make; }
};

//To know the number of minutes of parking time that has been purchased
class ParkingMeter
{
int purchased_minutes;
public:
ParkingMeter(int purchased_minutes) { this->purchased_minutes = purchased_minutes; }
};

//To report the make, model, color, and license number of the illegally parked car
//To report the amount of the fine, which is $25 for the first hour, or part of an
//hour that the car is illegally parked, plus $10 for every additional hour or
//part of an hour that the car is illegally parked
//To report the name and badge number of the police officer issuing the ticket
class ParkingTicket
{
ParkedCar car;
ParkingMeter meter;
PoliceOfficer officer;
public:
ParkingTicket(const ParkedCar &car, const ParkingMeter &meter, const PoliceOfficer &officer)
{
this->car = car;
this->meter = meter;
this->officer = officer;
}
};

//To know the officer's name and badge number
//To examine a ParkedCar object and a ParkingMeter object, and determine whether the car's time has expired
//To issue a prking ticket (generate a ParkingTicket object) if the car's time has expired
class PoliceOfficer
{
string name;
int badge_number;
ParkedCar car;
ParkingMeter meter;
public:
PoliceOfficer(const ParkedCar &car, const ParkingMeter &meter, string name = "...", int badge_number = 000000)
{

this->car = car;
this->meter = meter;
}

};

Поэтому я делаю этот файл для школы, и все идет хорошо, пока я не доберусь до классов ParkingTicket и PoliceOfficer. Я пытаюсь определить эти конструкторы, и они оба говорят мне, что по умолчанию нет другого конструктора. Как бы я это исправить? Спасибо! 🙂

-2

Решение

Так как ваш конструктор

PoliceOfficer(const ParkedCar &car, const ParkingMeter &meter, string name = "...", int badge_number = 000000)
{

this->car = car;
this->meter = meter;
}

не имеет инициализатора члена для car или же meter (назначения в теле не считаются инициализаторами), это как если бы вы написали : car(), meter() инициализаторы, которые пытаются вызвать конструкторы по умолчанию, которые не существуют. Вы должны явно написать инициализаторы членов:

PoliceOfficer(const ParkedCar &car, const ParkingMeter &meter, string name = "...", int badge_number = 000000)
: car(car), meter(meter)
{
}

(Кроме того, ваша объектная модель немного забавная: у полицейского есть один парковочный счетчик?)

4

Другие решения

Во-первых, ParkedCar (как вы это показали) делает иметь конструктор по умолчанию (все аргументы имеют значения по умолчанию, поэтому он может быть вызван без аргументов.

Реальное решение состоит в том, чтобы изменить использование конструктора, чтобы использовать список инициализатора:

   PoliceOfficer(const ParkedCar &car_, const ParkingMeter &meter_, string name = "...", int badge_number = 000000)
: car(car_), meter(meter_)
{
}
0

По вопросам рекламы [email protected]