首页 > 解决方案 > 更改对象向量的对象时,值会不断重置

问题描述

我创建了两个类。第一个类接受一个字符串作为参数,它设置为人名。

第二类是我创建一个包含对象的向量对象的地方。我需要这个对象稍后在代码中创建其他功能。(此代码是我的主要代码遇到的问题的一个示例)

在主要部分中,我创建了我尝试修改的人和人的对象。

修改代码后,它会恢复。

我已经尝试通过参考来获取所有内容,但它不起作用。我不确定我做错了什么。

创建对象的第一个类(这些将存储在向量中)

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 << "\n2\n";

    for (person &x : robots.getRobots()) {
        x.setName(x.getName() + "x");
        cout << x.getName() << ", ";
    }

    cout << "\n3\n";

    for (person &x : robots.getRobots()) {
        cout << x.getName() << ", ";
    }
}

这是代码的输出

1(我输出对象向量内的所有值)

2(我编辑向量内的所有值)

3(测试以显示值是否已更改)

1

约翰, 爱迪生, 杰夫斯, 埃勒诺, 柯蒂斯,

2

johnx, eddisonx, jevesx, elenourx, curtisx,

3

约翰, 爱迪生, 杰夫斯, 埃勒诺, 柯蒂斯,

为什么 3 处的输出与 2 不同?

标签: c++

解决方案


您返回副本而不是参考,

利用

const std::vector<person>& getRobots() const {  return _peeps; }
std::vector<person>& getRobots() {  return _peeps; }

推荐阅读