Не могу понять, где теряются данные вектора - PullRequest
0 голосов
/ 08 мая 2020

Я не совсем уверен, как сформулировать свой вопрос, поэтому постараюсь быть как можно более лаконичным и попросить у всех вас терпения.

Main:

MovieStore ctr{ repo };
MovieStoreGUI gui{ ctr };

Класс MovieStore (ctr):

class MovieStore {
    Repo& repo;
public:
    MovieStore(RepoAbstract& rep) noexcept :rep{ rep }{}
    const vector<Movie>& getAll() const
    {
        return rep.getAll();
    }

Класс репозитория:

class Repo{
protected:
    vector<Movie> all;
public:
    vector<Movie> getAll(){return all;}

А вот класс, в котором я хочу реализовать этого парня:

class MovieStoreGUI{
private:
    MovieStore& ctr;
    void reloadList(vector<Movie>);
public:
    MovieStoreGUI(MovieStore& ctr) : ctr{ ctr } {
        reloadList(ctr.getAll()); // here is the problem
    }
};

My проблема: я не могу отправить вектор, который содержит фильмы в функции reloadList, что бы я ни делал, он приходит как пустой вектор в функции ({size = 0} в отладчике). Я также пробовал ctr.getAll().size() в основном, и он показывает правильное значение, но здесь это другая история.

Я не знаю, достаточно ли я поделился информацией об этой ошибке, поэтому, если необходимо, запросите дополнительную информацию.

1 Ответ

1 голос
/ 08 мая 2020

Ваша проблема с

const vector<Movie>& getAll() const
{
    return rep.getAll();
}

Здесь вы возвращаете ссылку на rep.getAll(), но rep.getAll() является временным объектом. Это означает, что когда оператор return заканчивается, возвращаемый вектор уничтожается, и у вас остается ссылка на вектор, который больше не существует.

Чтобы исправить это, вам нужно либо Repo::getAll() вернуть ссылку, либо make MovieStore::getAll() возврат по значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...