как использовать сеттер для вектора объекта - PullRequest
1 голос
/ 03 мая 2020
std::vector<Game*> games;

У меня есть следующий установщик:

void Instructor::setGames(const std::vector<Game *> &value)
{
    games = value;
}

И я пытаюсь использовать его так:

 Game g1, g2, g3;
std::vector <Game> gameSet;
    gameSet.push_back(g1);
    gameSet.push_back(g2);
    gameSet.push_back(g3);
    i.setGames(&gameSet);

Но я продолжаю получать эту ошибку:

error: no matching function for call to ‘Instructor::setGames(std::vector<Game>*)’
     i.setGames(&gameSet);

Это тоже не работает.

 i.setGames(gameSet);

Что я делаю не так? Я хочу исправить это без изменения std::vector<Game*> games;

Ответы [ 2 ]

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

Учитывая, что у вас есть вектор Game указателей, это тип объекта, который он будет принимать, поэтому g1, g2 и g3 должны быть указателями:

Game *g1, *g2, *g3;
std::vector <Game*> gameSet;

g1 = new Game(); //intialize pointers
g2 = new Game();
g3 = new Game();
//...
i.setGames(gameSet);

Демонстрация в реальном времени

Обратите внимание, что использование сырых указателей в наши дни не очень хорошая практика, лучше всего использовать умные указатели, посмотрите на это.

Что такое умный указатель и когда его следует использовать?

0 голосов
/ 03 мая 2020

Для

i.setGames(&gameSet);

необходимо setGames с указателем на std::vector<Game>. Это означает, что следующая сигнатура функции

void Instructor::setGames(std::vector<Game> *value);

у вас есть const ref to simple std::vector<Game*>

void Instructor::setGames(const std::vector<Game*> &value);

Очевидно, что это разные типы, и у вас есть ошибка.


Нужно просто const std::vector<Game>& value

void Instructor::setGames(const std::vector<Game>& value)
{
    games = value; // also change the type of games  to be std::vector<Game>
}

и в основном

  Game g1, g2, g3;
  std::vector <Game> gameSet{ g1, g2, g3};
  i.setGames(gameSet);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...