【发布时间】:2018-04-28 04:50:42
【问题描述】:
已解决:改为使用指针向量
我有一个名为 Nurse 的类,我想要一个 Nurse 对象大小为 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])会影响每个
向量的其他成员。
我想也许我只需要在某个地方调用 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: 注意:候选人:Nurse& Nurse::operator=(const Nurse&) 护士班{
^Nurse.h:15:7: 注意:从 'Nurse*' 得到的参数 1 没有已知的转换 to 'const Nurse&'
【问题讨论】:
-
当你的向量增长时,它会复制你的对象。旧对象将被销毁,新复制的对象将取而代之。另外,考虑查看
emplace_back而不是push_back。 (实际上,重读,我不确定为什么每个护士都会被修改,我不确定我们是否有足够的代码知道原因。尽管使用第一种语法,您肯定是在创建对象)。 -
您的第一个代码示例是拥有彼此不影响的护士向量的正确方法。如果您仍然遇到问题,请发布 MCVE 以显示意外行为
-
有很多代码,所以我稍后可能会重新创建问题,但我认为这个小时可能工作量太大。我知道它不起作用的方式是每个护士都有一个存储为初始化为全 0 的整数数组的时间表。然后我调用 assign(0),它为 allNurses[0] 分配 schedule[0]=1。之后我调用 allNurses[1].printSchedule() 只是为了找到我对影响 allNurses[1] 的 allNurses[0] 的分配
-
@NickHZ 正如其他人所说,您的第一种方法不应导致一次更新影响数组中的其他元素。所以也许问题是每个 Nurse 对象如何保存这个整数的调度数组——也许它们都指向同一个数组。如果您无法发布所有代码,请检查所有 Nurse 对象是否只有该部分发生更改,而对象的其他部分可能没有更改。
-
我们需要查看
Nurse的定义才能知道它有什么问题。您可以使用vector。