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

但有时当我想实例化一个新对象时,我不需要传递“受训者”参数,所以我希望有可能这样做

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*>());

""是 a const char*,并且 astd::vector不能由此构造。

顺便说一句,dogz成为const 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 回答