2016-03-30 20 views
-2
#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

_ "どうすればこの問題を解決できますか?" _デフォルトのコンストラクタを提供します。パラメータを持たないか、すべてデフォルト値に設定します。 –

+2

ParkedCarとParkingMeterは本当に警察官のメンバーですか?警察官は実際に名前、バッジ、車、計器で構成されていますか? – kfsone

+0

はい、 'ParkedCar'と' ParkingMeter'は本当にPoliceOfficerのメンバーです。名前とバッジはPoliceOfficer特有のattrbutesですが、コンストラクタから受け取った 'car'と' meter'オブジェクトのクラスコピーを使用して、それらの値と関数を取得します。 PoliceOfficerはその情報を他には利用できないと報告することができます。 –

答えて

4

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) 
{ 
} 

は(また、あなたのオブジェクトモデルが少しおかしいです:?警察官は、単一のパーキングメーターを持っている)まず

+0

はい、私が使用している場合、役員には1台のパーキングメーターと1台の駐車車と1台の駐車券があります。後で 'ParkingMeter'オブジェクトの配列を持つようにプログラムを変更することもできます。 また、ありがとうございました!今は6つのエラーしかありません! :) –

0

ParkedCar(あなたがそれを示してきたように)は、(デフォルトのコンストラクタを持っているすべての引数はデフォルト値を持っているので、それは引数なしで呼び出すことができない

真の解決策は、初期化リストを使用するためにコンストラクタの使用を変更することです:。

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

申し訳ありませんが、 'car(car_)'と 'meter(meter_) 'を使ったやり方は、@ascheplerと少し先に触れたのと同じことです。 'メートル(メートル)'のスポットをそれぞれ表示します。パラメータ名はクラスの属性と同じにすることができます。たとえクラスオブジェクトであっても、パラメータ名は何もしませんが、応答に感謝します。 :) –

+0

彼は自分の答えを投稿しました。私は提出する前に彼の返事を見ませんでした(しかし、私たちは両方とも同じことを示唆していません - それは*正しい答えです)。私は別のものに同じ名前を使用することを避けることを好む - それは合法かもしれないが、私はそれが混乱していると思う。 –

関連する問題