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) {...}
我正在编写一个实现 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) {...}