求助:使用指针向量
我有一个名为Nurse的类,我想要一个大小为numNurses的Nurse对象的向量。每个对象都有唯一的数据。 我首先尝试使用代码
执行此操作std::vector<Nurse> allNurses;
for (int i=0; i<numNurses; i++){
allNurses.push_back (Nurse(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1));
}
但我发现改变任何护士的数据,有些人引用
all allNurses(例如allNurses[0]
)的索引会影响每个
向量的其他成员。
我想也许我只是需要在某个地方调用new,因为我可能永远不会创建新对象。尝试类似
的东西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 ='不匹配(操作数 类型是'护士'和'护士*')
allNurses[i]= new Nurse(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1); ^ In file included from Optimize_Schedule.cpp:5:0:
Nurse.h:15:7:注意:候选人:护士&amp;护士::操作员=(const护士&amp;) class Nurse {
^
Nurse.h:15:7:注意:“护士*”中的参数1没有已知的转换 来自'const Nurse&amp;'
答案 0 :(得分:0)
allNurses声明适用于vector或Nurse对象, 按值 :
std::vector<Nurse> allNurses;
所以你不想打电话给#34; new&#34;返回指针 关于&#39;运营商的投诉=&#39;是因为这一行试图将护士指针分配给护士实例。
allNurses[i]= new Nurse(...);
关于原始症状:
没有足够的信息来理解为什么更改一个Nurse对象可能会影响其他人 - 但是可能会有不同的解释。由于这是对象的向量(不是对象指针的向量),因此当向量扩展时,可能会使用默认的复制构造函数。如果Nurse包含任何无法逐个元素复制的成员,那么您需要自己的复制构造函数。 (在C ++ 11中移动构造函数。)
替代方案可能是使用(智能)指针的向量。然后&#34;运营商=&#34;会工作。
(如果沿着这条路线走,请考虑使用智能指针,这样在需要释放向量时无需显式清理所有向量元素。)
顺便说一句,如果你有C ++ 11并且正在使用向量值,请考虑使用&#34; \ templace_back&#34;而不是&#34; push_back&#34;按原样追加新构造的Nurse对象,如下所示:
allNurses.emplace_back(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1);