我一直在使用这个课程:
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)
{ };
但它没有用,所以请帮忙!
答案 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) {
};
从用户角度到实现目标,这几乎是一样的。