传递vector参数为空

时间:2012-04-27 09:10:42

标签: c++ vector constructor parameter-passing stdvector

我一直在使用这个课程:

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

但它没有用,所以请帮忙!

2 个答案:

答案 0 :(得分:3)

将构造函数声明为:

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引用。

答案 1 :(得分: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) {
};

从用户角度到实现目标,这几乎是一样的。