首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用向量保存类对象

使用向量保存类对象
EN

Stack Overflow用户
提问于 2017-11-15 04:24:12
回答 1查看 280关注 0票数 0

解决:使用指针向量代替

我有一个名为“护士”的类,我想要一个护士对象的大小向量numNurses。每个对象都有唯一的数据。我第一次尝试用代码来做这件事。

代码语言:javascript
运行
复制
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]),都会影响到向量的其他成员。

我想,也许我只是需要调用新的地方,因为我可能从来没有创建新的对象。试着像

代码语言:javascript
运行
复制
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没有已知的转换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-15 05:43:28

allNurses声明是针对向量或Nurse对象的,按值

代码语言:javascript
运行
复制
std::vector<Nurse> allNurses;

因此,您不希望调用"new“来返回指针。

关于“operator=”的抱怨是因为这一行试图为护士实例分配一个护士指针。

代码语言:javascript
运行
复制
allNurses[i]= new Nurse(...);

关于最初的症状:

没有足够的信息来理解为什么改变一个护士对象可能会影响其他人--但是可能有一个不同的解释。由于这是对象的向量(而不是对象指针的向量),默认的复制构造函数很可能在展开向量时使用。如果Nurse包含任何不能逐元素复制的成员,则需要您自己的副本构造函数。(在C++11中移动构造函数。)

另一种方法可能是使用(智能)指针向量。那么"operator=“就能工作了。

(如果沿着这条路线走下去,请考虑使用智能指针,这样在需要释放向量时就不需要显式地清除所有的向量元素。)

顺便说一句,如果您有C++11,并且正在按值使用向量,请考虑使用"emplace_back“而不是"push_back”来附加新构造的Nurse对象,如下所示:

代码语言:javascript
运行
复制
allNurses.emplace_back(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47299340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档