首页 > 解决方案 > 为什么我不能将一个对象 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());

标签: c++

解决方案


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指出这一点

记住 - 要处理原始对象,而不是它的副本,您应该通过引用指针传递它。默认情况下,您应该更喜欢通过引用传递,除非您有强烈的论据来使用指针


推荐阅读