【发布时间】:2023-01-04 23:00:12
【问题描述】:
我是一个完全的 C++ 初学者,所以所有的概念对我来说都是全新的。手头的问题是我有一个向量,它由诸如
vector<Item> inventory { item1, item2, item3 };
我通过引用将它传递给一个函数,然后需要将它传递给另一个函数以检索具有我需要的 itemId 的对象
Item& returnItem(vector<Item> &vec, int id) {
for(Item &i : vec) {
if(i.getItemId() == id) {
return i;
}
}
void f(vector<Item> &vec, int id) {
Item foundItem = returnItem(vec, id);
}
我有另一个需要将此对象传递给的函数,但显然它没有按预期工作,因为在运行 returnItem 函数后使用 foundItem.setItemId() 不会更改向量内的任何内容。
有什么简单的方法可以解决这个问题,或者更好的方法是什么?
【问题讨论】:
-
returnItem返回一个引用,但是当您使用Item foundItem = returnItem(...)时,您实际上得到了一个副本。要获得参考,您需要Item & foundItem = returnItem(...)。 -
请发一个minimal reproducible example-
setItemId,我想你需要Item& foundItem = returnItem(vec, id);,否则foundItem是i的副本; -
定义“未按预期工作”。 minimal reproducible example 会很有用。