class C++ 中的值未更新

Value not updating in class C++

我正在编写一个实现 OOP 原理的分配程序,旨在模拟选举。

我有一个 class 派对:

class Party{
public:
    Party(){};
    ~Party(){};
    Party(std::string name, int budget){partyName = name; electionBudget = budget;}
    std::string getPartyName(){return partyName;}
    std::string getLeaderName(){return leaderName;}
    std::string getManagerName(){return managerName;}

    int getElectionBudget(){return electionBudget;}
    void setElectionBudget(int budget){electionBudget = budget;}

    void setLeaderName(std::string lName){leaderName = lName;}
    void setManagerName(std::string mName){managerName = mName;}

    std::vector<Stance> getPartyStances(){return partyStance;}
    void setPartyStances(std::vector<Stance> pStance){partyStance = pStance;}

    void *leaderPtr;
    void *managerPtr;

    void setLeader(void *a){leaderPtr = a; }
    void setManager(void *a){managerPtr = a;}

    void spendMoneyOnEvent(int cost){
        int currentBudget = getElectionBudget();
        setElectionBudget(currentBudget - cost);
    }


    void print();

private:
    std::string partyName;
    std::string leaderName;
    std::string managerName;
    std::vector<Stance> partyStance;
    int electionBudget;
};

在一个大的for循环中,我每天更新各方留下的预算,如下所示:

for(Party p : partiesVector){
            std::cout << p.getPartyName() << " budget remaining: " << "$" << p.getElectionBudget() << std::endl;
        }

我还在 main.cpp 中实施了代码,以便在每次事件发生时更新预算。例如:

case 0:
        std::cout << debate.getEventName() << std::endl;
        std::cout << debate.getEventDecription() << std::endl;

        party1.spendMoneyOnEvent(500);

        std::cout << party1.debate.haveDebate(party1, party2, party3);
        break;

但是,无论我尝试设置什么或尝试更新变量,它始终保持不变(我声明的内容)。有什么我不明白或遗漏的地方吗?

任何帮助将不胜感激,因为我对 C++ 还是比较陌生

谢谢!

for(Party p : partiesVector) 正在按值 接收 Party 对象 ,因此生成了 copy。对 p 的任何更新都将更新副本,而不是原始文件。确保这样的循环接收 Party by reference 而不是:

for(Party &p : partiesVector)

你无论如何都应该这样做,即使是只读循环。

更重要的是,您的显示循环是通过 Party 个对象的 vector 进行迭代,但是您的更新代码是直接更新不在 [=17] 中的 Party 个对象=].当您将 Party 添加到 vector 时,您可能制作了另一个 copy。因此,您应该更改更新代码以引用 vector.

中的 Party
partiesVector[someIndex].spendMoneyOnEvent(500);

或者更改 vector 以保存指向您在 vector.

外部创建的 Party 对象的指针
vector<Party*> partiesVector;
...
Party party1;
...
partiesVector.push_back(&party1);
...
party1.spendMoneyOnEvent(500);
...
for(Party *p : partiesVector) {...}