Я создал метод, который должен изменить значения в моем объекте магазина. К сожалению, значения не изменяются.Значение объекта не будет изменено
редактировать: 18:13
я мог бы создать новый объект магазин и вернуть его, но я думал, что он должен работать с пропусканием объекта по ссылке?
Чтобы сделать мой вопрос более ясным: моя единственная проблема в том, что новые значения не сохраняются в объекте. Я выполнил отладку, и все значения были правильно рассчитаны и как ожидалось.
Проблема заключается в линиях:
shop.get_stock().push_back(inventory_bonbon);
Эта линия должна толкать новый элемент инвентаря для вектора (содержащего элементы инвентаря), если этот пункт инвентаризации в настоящее время нет на складе.
Здесь я увеличиваю количество элемента инвентаризации, когда элемент находится в наличии:
i_inventory_shop.increase_amount(shop.get_stock()[i], amount);
(У меня есть блок-протестировали метод INCREASE_AMOUNT() и она отлично работает.)
Две строки называются ожидаемыми (это означает, что я нахожу, когда товар находится в запасе или нет).
void IRooms::increase_inventory_shop(Shop & shop, Bonbon & bonbon, int amount)
{
OutputDebugString("I_Game Logic increase_inventory_shop called \n");
IInventoryItemsBonbons i_inventory_shop;
bool bonbon_in_shop = false;
for (int i = 0; i < shop.get_stock().size(); i++)
{
OutputDebugString(("I_Game Logic shop vector size \n" + std::to_string(shop.get_stock().size()) + "\n").c_str());
OutputDebugString(("I_Game Logic bonbon name \n" + bonbon.get_name() + "\n").c_str());
OutputDebugString(("I_Game Logic bonbon amount \n" + std::to_string(amount) + "\n").c_str());
if (bonbon.get_name() == shop.get_stock()[i].get_bonbon().get_name())
{
bonbon_in_shop = true;
OutputDebugString("Bonbon found \n");
i_inventory_shop.increase_amount(shop.get_stock()[i], amount);
break;
}
}
if (bonbon_in_shop == false) {
OutputDebugString("Bonbon not found \n");
InventoryItemBonbons inventory_bonbon = i_inventory_shop.create(amount, bonbon);
shop.get_stock().push_back(inventory_bonbon);
}
}
Этот метод вызывает: (метод ниже, я тестировал)
void IInventoryItemsBonbons::increase_amount(InventoryItemBonbons & inventoryitem_shop, int amount)
{
int old_amount = inventoryitem_shop.get_amount();
int new_amount = old_amount + amount;
inventoryitem_shop.set_amount(new_amount);
}
редактировать 17:51:
Shop.h
std::vector<InventoryItemBonbons> get_stock();
Shop.ccp
std::vector<InventoryItemBonbons> Shop::get_stock()
{
return stock_bonbons;
}
_____________________________________________________________________________edit: 19:54
Я теперь ввели локальные переменные и я возвращаю местный магазин.
Shop IRooms::increase_inventory_shop(Shop & shop, Bonbon & bonbon, int amount)
{
Shop shop_temp = shop;
std::vector<InventoryItemBonbons> inventory_items_temp = shop.get_stock();
IInventoryItemsBonbons i_inventory_shop;
bool bonbon_in_shop = false;
for (int i = 0; i < shop_temp.get_stock().size(); i++)
{
if (bonbon.get_name() == shop_temp.get_stock()[i].get_bonbon().get_name())
{
bonbon_in_shop = true;
i_inventory_shop.increase_amount(inventory_items_temp[i], amount);
break;
}
}
if (bonbon_in_shop == false) {
InventoryItemBonbons inventory_bonbon = i_inventory_shop.create(amount, bonbon);
inventory_items_temp.push_back(inventory_bonbon);
}
shop_temp.set_stock(inventory_items_temp);
//shop = shop_temp;
//return shop;
return shop_temp;
}
Единственное, что я хочу знать, почему стоимость магазина не изменится. Я попытался скопировать shop_temp в магазин, но даже это не работает.
Вместо проверку только выхода, почему гайка на самом деле * запуск * в отладчике, и шаг за шагом через код построчно, чтобы увидеть, что же действительно происходит, а также * шаг в * функции, которые вы вызываете, ошибка может не отображаться в коде, который вы показываете. –
Я бы предположил, что причина, по которой ваш объект магазина не изменен, заключается в том, что вы пишете локальную переменную 'IInventoryItemsBonbons i_inventory_shop;' вместо того, где вы думали, что пишете. – john
Как выглядит 'Shop :: get_stock()'? –