解决:使用指针向量代替
我有一个名为“护士”的类,我想要一个护士对象的大小向量numNurses。每个对象都有唯一的数据。我第一次尝试用代码来做这件事。
std::vector<Nurse> allNurses;
for (int i=0; i<numNurses; i++){
allNurses.push_back (Nurse(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1));
}
但我发现,将任何护士的数据更改为allNurses (例如,allNurses[0]
),都会影响到向量的其他成员。
我想,也许我只是需要调用新的地方,因为我可能从来没有创建新的对象。试着像
allNurses[i]= new Nurse(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1);
导致了一个错误(我不认为这个错误太重要): Optimize_Schedule.cpp:在构造函数‘Optimize_Schedule::Optimize_Schedule(Int)’中: Optimize_Schedule.cpp:38:17:错误:与“operator=”不匹配(操作数类型为“护士”和“护士*”) allNursesi=新护士(输入,numShifts,numDays,inRow,nurMaxDay,保姆日,1);在文件中包括Optimize_Schedule.cpp:5:0: Nurse.h:15:7:注:候选人:护士及Nurse::operator=(康斯特护士及)级护士{ ^ Nurse.h:15:7:注:从“护士*”到“康斯特护士&”的论点1没有已知的转换。
发布于 2017-11-15 05:43:28
allNurses声明是针对向量或Nurse对象的,按值
std::vector<Nurse> allNurses;
因此,您不希望调用"new“来返回指针。
关于“operator=”的抱怨是因为这一行试图为护士实例分配一个护士指针。
allNurses[i]= new Nurse(...);
关于最初的症状:
没有足够的信息来理解为什么改变一个护士对象可能会影响其他人--但是可能有一个不同的解释。由于这是对象的向量(而不是对象指针的向量),默认的复制构造函数很可能在展开向量时使用。如果Nurse包含任何不能逐元素复制的成员,则需要您自己的副本构造函数。(在C++11中移动构造函数。)
另一种方法可能是使用(智能)指针向量。那么"operator=“就能工作了。
(如果沿着这条路线走下去,请考虑使用智能指针,这样在需要释放向量时就不需要显式地清除所有的向量元素。)
顺便说一句,如果您有C++11,并且正在按值使用向量,请考虑使用"emplace_back“而不是"push_back”来附加新构造的Nurse对象,如下所示:
allNurses.emplace_back(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1);
https://stackoverflow.com/questions/47299340
复制相似问题