我在std::vector<Box> boxes
填充了9个Box
个对象,每个对象都有自己的字符串变量name
。正如错误检查一样,我试图浏览对象向量并打印每个对象的name
变量。但是,控制台仍为空白。这是填充和打印矢量的功能:
void Engine::FillVector(){
Board board;
for(int i = 0; i < 9; i++){
Box box;
board.GetBoxes().push_back(box);
}
int size = board.GetBoxes().size();
for(int i = 0; i < size; i++){
board.GetBoxes()[i].SetName("box");
std::cout << board.GetBoxes()[i].GetName();
}
}
所以&#34;盒子&#34;应该在控制台中显示九次吧? GetBoxes
只返回向量boxes
,而SetName
也只是将每个Box
对象的名称设置为"box"
。为什么控制台保持空白?
答案 0 :(得分:2)
std::vector<Box> Board::GetBoxes(){return boxes; }
每次调用时都会返回boxes
的副本。
std::vector<Box> &Board::GetBoxes(){return boxes; }
// ^ Hi!
这会向您的向量返回引用。然后你可以随意从外面采取行动。
它通常最好用const过载补充:
std::vector<Box> const &Board::GetBoxes() const {return boxes; }
...用于只读访问。
有关参考资料的更多信息,我会无耻地将您链接到another answer of mine。