2017-02-15 15 views
0

3組と3組のコンストラクタを持つプログラムを作成する必要があります。私はデフォルトコンストラクタを作成したときしかし、それは前に「)」私があることが必要というエラーを与えた「」行デフォルトのコンストラクタC++形式

#include <string> 

class Vehicle 
{ 
public: 
    Vehicle(std::string vehicleType, int numberOfDoors, int maxSpeed) 
     : type{vehicleType}, number{numberOfDoors}, speed{maxSpeed}{} 
    void setType(std::string vehicleType) { 
       type = vehicleType;} 
    void setNumber(int numberOfDoors){ 
        number = numberOfDoors;} 
    void setSpeed(int maxSpeed) { 
       speed = maxSpeed;} 

    Vehicle(string, int, int); 
    ~Vehicle(); 
    Vehicle(); 
    std::string getType() const {return type;} 
    int getNumber() const {return number;} 
    int getSpeed() const {return speed;} 

private: 
    std::string type; 
    int number; 
    int speed; 
}; 

に誰かが間違っているものを私に言うことはできますか?

+0

'ビークル(文字列、int型、int)を参照してください;' - それは 'のstdでなければなりません::文字列 '。 'string'はここの型の名前ではありません。 – yeputons

+0

なぜ同じコンストラクタを2回宣言していますか? 'Vehicle(std :: string vehicleType、int numberOfDoors、int maxSpeed)'および 'Vehicle(string、int、int)'のようになります。 – iosdude

+0

@iosdude 私はそれを残しておけば、vehicle:vehicleには未定義の参照があります。つまり、デフォルトコンストラクタがないことを意味します。 – xx123

答えて

0

既に定義されているようにVehicle(string, int, int);を削除する必要があります。

+0

Vehicleを削除すると(string、int、int); それから、私はデフォルトコンストラクタが必要だと伝えます。それは私に "Vehicle :: Vehicle"への未確認の参照を与える – xx123

+0

あなたは 'Vehicle();'と '〜Vehicle();' を削除するか、@swapnil suggest - 'Vehicle()= default; Vehicle()=デフォルト; 'C++ 11の場合。 – grubs

1

クラスの初めにメンバー初期化子リストを使用してクラスVehicleのメンバー変数を初期化する3つの引数コンストラクタがすでに定義されています。したがって、以下で再度宣言する必要はありません。

Vehicle(string, int, int); 

この行を削除すると、コードがコンパイルされます。さらにhere

あなたのクラスをインスタンス化するとき、あなたは三つの引数、1 stringを提供する必要がありますし、2 int

を参照してください、あなたはデフォルトコンストラクタを持っているしたい場合は、あなたのクラスに次の行を追加することができます。

Vehicle():type(), number(0), speed(0){} 

次に、あなたがこのようなオブジェクトのメンバ変数に値を設定するために、任意の引数およびユーザーセッター機能せずにVehicleクラスをインスタンス化することができるはずです。

も定義されていないデストラクタを削除いずれかまたは多分このようにデストラクタを定義します。

~Vehicle(){ type.clear();} 

here

関連する問題