1

私はこのクラスを使用しています:

class DogTrainer 
{
    public:
        DogTrainer(int identity,const std::string& nom, const std::vector<Dog*> dogz) :    
         idD(identity),
         name(nom),
         trainees(dogz)
    { };

        ~DogTrainer();

    private:
        int idD;
        string name;
        std::vector<Dog*> trainees;
};

ただし、新しいオブジェクトをインスタンス化する場合は、「trainees」パラメータを渡す必要がない場合があるため、これを実行できるようにしたい場合があります。

DogTrainer* Trainer=new DogTrainer(my_id, my_name);

したがって、DogTrainerコンストラクターを変更しようとしました

DogTrainer(int identity,const std::string& nom, const std::vector<Dog*> dogz="") :
    idD(identity), 
    name(nom), 
    trainees(dogz)
{ };

しかし、それはうまくいきませんでしたので、助けてください!

4

2 に答える 2

3

コンストラクターを次のように宣言します。

DogTrainer(int identity,const std::string& nom,
           const std::vector<Dog*> dogz = std::vector<Dog*>());

""は、const char*であり、astd::vectorはそれから構築できません。

ちなみに、であることにはあまり意味がありませdogzconst std::vector<Dog*>。非にconstするか、const参照にします。

于 2012-04-27T09:14:05.553 に答える
1

空の文字列をに割り当てようとしているため、機能しませんvector。最後のパラメーターを省略してコンストラクターをオーバーロードするだけです。

DogTrainer(int identity,const std::string& nom, const std::vector<Dog*> dogz)
    :idD(identity), name(nom), trainees(dogz) {
};

DogTrainer(int identity,const std::string& nom):idD(identity), name(nom) {
};

これは、ユーザーの観点からは、達成したいことと実質的に同じです。

于 2012-04-27T09:14:32.687 に答える