проблема с переменной внутри переменной возвращается после изменения изменено - PullRequest
2 голосов
/ 17 января 2020

У меня проблема в том, что как только я изменяю переменную, она кажется неизменной, когда на нее ссылаются позже в коде.

class foo
{
private:
    string name;
public:
    foo(string _name)
    :name(_name)
    {}
    void info()
    { cout<<name; }
    void newName(string new_name)
    { name = new_name; }
};

class bar
{
private:
    string _name;
    vector<foo> _content;
public:
    foo at(int i)
    { return _content.at(i); }
    void push_back(foo newFoo)
    { _content.push_back(newFoo); }
};

int main()
{
    foo test("test");
    bar kick;
    kick.push_back(test);
    kick.at(0).newName("nice");
    kick.at(0).info();

    return 0;
}

Я бы хотел, чтобы программа вернула "nice", но она возвращает " тестовое задание". Я предполагаю, что это имеет какое-то отношение к сфере, но я не знаю. Как бы я написал что-нибудь, что может обойти эту проблему?

1 Ответ

2 голосов
/ 17 января 2020

Эта функция-член

foo at(int i)
    { return _content.at(i); }

возвращает копию объекта, сохраненного в векторе.

Если вы хотите получить ожидаемый результат, верните ссылку.

foo & at(int i)
    { return _content.at(i); }

const foo & at(int i) const
    { return _content.at(i); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...