如何使用对象向量的setter?

问题描述 投票:0回答:1
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;

c++ oop pointers vector std
1个回答
1
投票

鉴于你有一个矢量 Game 指针,那是它将接受的对象类型,因此 g1, g2g3 必须是指针。

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

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

现场演示

需要注意的是,现在使用原始指针并不是一个很好的做法,最好是使用智能指针,请研究一下。

什么是智能指针,什么时候应该使用智能指针?


0
投票

聪明指针是什么?

i.setGames(&gameSet);

需要 setGames 指针 std::vector<Game>. 这意味着下面的函数签名

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

你有的只是简单的const ref 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);
© www.soinside.com 2019 - 2024. All rights reserved.