更改对象向量的对象时,值会不断重置
我创建了两个类。第一个类接受一个字符串作为参数,它设置为人名。
第二个类是我创建一个包含对象的向量对象。我需要这个对象稍后在代码中创建附加功能。(此代码是我的主代码遇到的问题的示例)
在主要部分,我创建了人和我尝试修改的人的对象。
修改代码后,它恢复。
我尝试通过参考来获取所有内容,但它不起作用。我不确定我做错了什么。
创建对象的第一个类(这些将存储在向量中)
class person {
// Private
string name;
public:
// Constructor
person(const std::string& n) : name(n) {};
std::string getName() {
return name;
}
void setName(const std::string& n) {
name = n;
}
};
这是创建采用对象向量的对象的类。
class people {
// Private
vector<person> _peeps;
public:
// Constructor
people(const vector<person>& r) : _peeps(r) {};
vector<person> getRobots() {
return _peeps;
}
void addRobot(const person& r) {
_peeps.push_back(r);
}
};
这是我创建对象并打印输出的代码的主要部分。
int main(){
string arr[5] = { "john", "eddison", "jeves", "elenour", "curtis"};
vector<person> rob;
for (auto x : arr) {
rob.push_back(person(x));
}
people robots = people(rob);
for (person &x : robots.getRobots()) {
cout << x.getName() << ", ";
}
cout << "n2n";
for (person &x : robots.getRobots()) {
x.setName(x.getName() + "x");
cout << x.getName() << ", ";
}
cout << "n3n";
for (person &x : robots.getRobots()) {
cout << x.getName() << ", ";
}
}
这是代码的输出
1(我输出对象向量内的所有值)
2(我在其中编辑矢量内的所有值)
3(测试以显示值是否已更改)
1
约翰, 爱迪生, 杰夫斯, 埃勒诺尔, 柯蒂斯,
2
johnx, eddisonx, jevesx, elenourx, curtisx,
3
约翰, 爱迪生, 杰夫斯, 埃勒诺尔, 柯蒂斯,
为什么 3 处的输出与 2 不同?
回答
您返回副本而不是引用,
用
const std::vector<person>& getRobots() const { return _peeps; }
std::vector<person>& getRobots() { return _peeps; }