C ++ OOP库存和项目类

时间:2018-02-12 23:24:55

标签: c++ class inventory

创建库存类和商品类...处理库存中的“清除”商品。

#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;

1 个答案:

答案 0 :(得分:1)

  

它应该返回一个Item对象,我需要从整数值中获取Item个对象。

好的,所以你离这儿很近。从您的描述中可以看出Item被定义为

struct Item
{
    std::string name;
    int numItem;  ///< search for this value
};

您的itemsItem的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;您知道的价值不在您的广告资源中。