创建库存类和商品类...处理库存中的“清除”商品。
#include "Inventory.h"
#include <iostream>
void Inventory::PrintInventory() {
for (auto i = items.begin(); i != items.end(); i++) {
std::cout << i->name << " " << i->numItem << std::endl;
}
}
void Inventory::ReceiveItem(Item item) {
items.push_back(item);
}
Item Inventory::TakeItem(int num) {
items.erase(items.begin() + num);
auto item = std::find(items.begin(), items.end(), num);
//issue is here
//my teacher said to set it up as Item Inventory that takes in an int.
return item;
}
//这是在演员类......
void Actor::GiveItem(Actor* actor, Item item) {
int num = item.numItem;
actor->inventory.ReceiveItem(item);
inventory.TakeItem(num);
}
问题是......我不知道在库存类的物品库存功能中该怎么做,它应该返回一些东西,但我不知道为什么......老师无法到达。如果它应该返回一个Item对象,我需要从整数值中获取Item对象。 Item对象类有一个char *名称;和int numItem;
答案 0 :(得分:1)
它应该返回一个
Item
对象,我需要从整数值中获取Item
个对象。
好的,所以你离这儿很近。从您的描述中可以看出Item
被定义为
struct Item
{
std::string name;
int numItem; ///< search for this value
};
您的items
是Item
的STL容器,我们将使用std::vector<Item> items;
。
如果必须返回Item
对象,则应声明默认值Item
以返回错误。如果您成功找到Item::numItem
的匹配项,那么您将使用这些值填充默认Item
。最后,如果您确实找到了要拍摄的物品,则会将其清除以进行库存管理。出于显而易见的原因,请不要在找到之前删除Item
!
Item TakeItem(int num)
{
Item localItem;
for (auto it = items.begin(); it != items.end();) {
// if we find a match set local item and then
// remove the item from inventory
// and break out of loop since we are done
if ((*it).numItem == num) {
localItem = *it;
it = items.erase(it);
break; // found and removed from inventory!
} else {
++it;
}
}
return localItem;
}
如果找不到Item
的任何匹配项,则返回默认构造的num
有点尴尬,但如果您想检测到这种情况,您可以随时做一些事情,比如将其初始化为&#34; bogus&#34;您知道的价值不在您的广告资源中。