c++ - 为什么我不能将一个对象 push_back 到属于另一个类的对象向量中?
问题描述
我在这里要做的是添加Voter
一个vector
属于RegLogBook
并且RegLogBook
是我的Election
班级拥有的对象。我不知道我在这里做错了什么,该Voter
对象没有被添加到vector
. 相关代码如下,我已经删除了所有不必要的部分。
选举.h
class Election
{
public:
Election();
~Election();
RegLogBook getRegLogBook();
private:
RegLogBook* _regLogBook;
};
选举.cpp
Election::Election()
{
_regLogBook = new RegLogBook();
}
RegLogBook Election::getRegLogBook() {
return *_regLogBook;
}
RegLogBook.h
class RegLogBook
{
public:
RegLogBook();
~RegLogBook();
vector<Voter*> getVoterList();
private:
vector<Voter*> _voterList;
};
RegLogBook.cpp
vector<Voter*> RegLogBook::getVoterList() {
return _voterList;
}
Committee.cpp 登记选民方法
void Committee::RegVoter(RegLogBook logs) {
Voter *newVoter = new Voter();
logs.getVoterList().push_back(newVoter); //The voter is not added to the list
}
我在我的 main() 中调用它
Election *Election2018 = new Election();
Committee com1 = new Committee();
com1.RegVoter(Election2018->getRegLogBook());
解决方案
RegLogBook::getVoterList()
_voterList
按值返回您的。这意味着它复制整个向量并返回它。然后将元素添加到该副本。
要解决此问题,只需更改您的
vector<Voter*> RegLogBook::getVoterList()
至
vector<Voter*>& RegLogBook::getVoterList()
// ^ notice the reference part
我最初错过了另一个问题。在您的Committee::RegVoter
方法中,您按 value接受参数。这意味着该方法将使用您的RegLogBook
. 你也应该改变
void Committee::RegVoter(RegLogBook logs)
至
void Committee::RegVoter(RegLogBook& logs)
// again notice the reference ^
感谢轨道上的 Lightness Races指出这一点
记住 - 要处理原始对象,而不是它的副本,您应该通过引用或指针传递它。默认情况下,您应该更喜欢通过引用传递,除非您有强烈的论据来使用指针
推荐阅读
- amazon-web-services - 生成 kubeconfig 以访问 Amazon EKS 集群
- swift - 是否可以在 swift 中为“self”使用别名?
- c++ - 使用枚举和模板参数正确定义显式默认构造函数
- arrays - 更新文档的可变字段
- python - pptx 图表类参数
- html - 网站内容或表格框有D连线通过吗?
- ios - 如何正确调整 UITabBarController 图标的大小?
- javascript - 如何在 Node 中共享范围和变量?
- google-cloud-vision - 如何同时使用 Google Cloud Search 和 Vision API
- c++ - EXC_BAD_ACCESS (code=1, address=0x0) 当调用“glClear(GL_COLOR_BUFFER_BIT);” 在 glfw 的 hello world 程序中