我用2个类的c ++编写了一个程序。基本上,“ HeroList”只是“ Hero”元素的向量。现在,我想更改每个英雄给定的值(在“更改”功能中)。但这是行不通的。仅当我直接使用“英雄”对象作为参数调用该函数时,它才有效(尝试1)。但是,当我使用“ heroList”元素作为参数(尝试2)时,它仅在函数处于活动状态且其重置时才更改值。我想这与引用的使用有关,但是我找不到我的错误。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Hero
{
private:
string name; //Hero-Name
int value; //Hero-Value
public:
Hero(string name = "std", int value = 0) {
this->name = name;
this->value = value;
}
void setValue(int i) {
if (i == 1) { //If 1 -> value - 1
if (value != 0) { //If value already 0 nothing happens
value = value - 1;
}
}
if (i == 2) { //If 2 -> value + 1
if (value != 10) { //If value already 10 nothing happens
value = value + 1;
}
}
}
float getValue() {
return value;
}
string getName() {
return name;
}
void print() {
cout << name << ": " << value << endl;
}
};
class HeroList
{
private:
string name;
vector<Hero> Heroes;
public:
HeroList(string name = "std", vector<Hero> Heroes = {}) {
this->name = name;
this->Heroes = Heroes;
}
string getName() {
return name;
}
vector<Hero> getHeroes() {
return Heroes;
}
};
void change(Hero& x, Hero& y) { //Function to change the Hero-Values permanently (not only during the function is running)
x.setValue(2);
y.setValue(1);
}
int main() {
Hero Alice("Alice", 5);
Hero Bob("Bob", 5);
vector<Hero> duo = { Alice,Bob };
HeroList Duo("Duo", duo);
//try 1
change(Alice, Bob);
cout << "try 1: " << endl;
cout << Alice.getName()<<": " << Alice.getValue() << endl;
cout << Bob.getName() << ": " << Bob.getValue() << endl << endl;
//try 2
change(Duo.getHeroes()[0], Duo.getHeroes()[1]);
cout << "try 2: " << endl;
cout << Duo.getHeroes()[0].getName() << ": " << Duo.getHeroes()[0].getValue() << endl;
cout << Duo.getHeroes()[1].getName() << ": " << Duo.getHeroes()[1].getValue() << endl;
return 0;
}
输出:
try 1:
Alice: 6
Bob: 4
try 2:
Alice: 5
Bob: 5
应该如何:
try 1:
Alice: 6
Bob: 4
try 2:
Alice: 6
Bob: 4
您可以更新getHeroes()
以返回对向量的引用Heroes
以获得所需的行为:
vector<Hero>& getHeroes() {
return Heroes;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句