如何使用c++;? 我用C++编写了一个2个类的程序。基本上,“英雄列表”只是“英雄”元素的载体。现在我想更改每个英雄给出的值(在函数“change”中)。但它不起作用。仅当我将“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; }

如何使用c++;? 我用C++编写了一个2个类的程序。基本上,“英雄列表”只是“英雄”元素的载体。现在我想更改每个英雄给出的值(在函数“change”中)。但它不起作用。仅当我将“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; },c++,function,class,reference,attributes,C++,Function,Class,Reference,Attributes,应该如何: try 1: Alice: 6 Bob: 4 try 2: Alice: 6 Bob: 4 您可以更新getHeroes()以返回对Heroes向量的引用,以获得所需的行为: vector<Hero>& getHeroes() { return Heroes; } vector&getHeroes(){ 回归英雄; } 您可以更新getHeroes()以返回对英雄向量的引用,以获得所需的行为: vector<Hero>& getH

应该如何:

try 1:
Alice: 6
Bob: 4

try 2:
Alice: 6
Bob: 4

您可以更新
getHeroes()
以返回对
Heroes
向量的引用,以获得所需的行为:

vector<Hero>& getHeroes() {
    return Heroes;
}
vector&getHeroes(){
回归英雄;
}

您可以更新
getHeroes()
以返回对
英雄
向量的引用,以获得所需的行为:

vector<Hero>& getHeroes() {
    return Heroes;
}
vector&getHeroes(){
回归英雄;
}
问题在于:

在HeroList类中

vector<Hero> getHeroes() {
    return Heroes;
}
向量getHeroes(){ 回归英雄; } 您正在返回
向量的副本
。。。。尝试返回一个引用

vector<Hero>& getHeroes() {
    return Heroes;
}
vector&getHeroes(){
回归英雄;
}
问题在于:

在HeroList类中

vector<Hero> getHeroes() {
    return Heroes;
}
向量getHeroes(){ 回归英雄; } 您正在返回
向量的副本
。。。。尝试返回一个引用

vector<Hero>& getHeroes() {
    return Heroes;
}
vector&getHeroes(){
回归英雄;
}

getHeroes
返回一个向量。不是对向量的引用,而是一个新的向量。如果您想从类外访问和操作私有数据,为什么首先要将其设置为私有?您正在使它变得不必要的复杂
getheros
返回一个向量。不是对向量的引用,而是一个新的向量。如果您想从类外访问和操作私有数据,为什么首先要将其设置为私有?你把事情弄得非常复杂