值在c++类中不更新



我正在编写一个赋值程序,它实现了面向对象的原则,旨在模拟选举。

我有一个班级聚会:

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对象的值,因此生成一个副本。对p的任何更新都将更新副本,而不是原件。确保这些循环通过引用接收Party而不是:

for(Party &p : partiesVector)

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

更重要的是,您的显示循环是通过Party对象的vector进行迭代,但您的更新代码直接更新不在vector中的Party对象。当您将Party添加到vector时,可能会生成另一个副本。因此,您应该更改您的更新代码,以引用vector中的Party

partiesVector[someIndex].spendMoneyOnEvent(500);

或者更改vector以保存指向Party对象的指针,这些对象是在vector之外创建的。

vector<Party*> partiesVector;
...
Party party1;
...
partiesVector.push_back(&party1);
...
party1.spendMoneyOnEvent(500);
...
for(Party *p : partiesVector) {...}

最新更新