Передача параметра вектора пустым

Я использовал этот класс:

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;
};

но иногда, когда я хочу создать экземпляр нового объекта, мне не нужно передавать параметр "ученики", поэтому я хочу иметь возможность сделать это

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

но это не сработало, так что помогите, пожалуйста!

2 ответа

Решение

Объявите ваш конструктор как:

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

"" это const char*и std::vector не конструируем из этого.

Между прочим, нет особого смысла dogz быть const std::vector<Dog*>, Либо сделать это неconst или сделать это const ссылка.

Это не будет работать, потому что вы пытаетесь присвоить пустую строку 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) {
};

Это будет практически то же самое с точки зрения пользователя, что вы хотите достичь.

Другие вопросы по тегам