C++ OOP 清单和项目 class

C++ OOP inventory and item class

正在创建库存 class 以及项目 class...正在处理库存中的库存 "removing" 项目。

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

//这个在actor里class...

void Actor::GiveItem(Actor* actor, Item item) {
    int num = item.numItem;
    actor->inventory.ReceiveItem(item);
    inventory.TakeItem(num);
}

问题是...我不确定在 Inventory class 的 Item Inventory 功能中做什么,它应该 return 一些东西,但我不确定为什么...无法联系到老师.如果它应该 return 一个 Item 对象,我需要从整数值中获取 Item 对象。 Item 对象 class 有一个 char* 名称;和 int numItem;

It is supposed to return an Item object, I need to get Item object from the integer value.

好的,你已经很接近了。根据您的描述,听起来 Item 被定义为

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

而您的 itemsItem 的 STL 容器,我们将使用 std::vector<Item> items;

如果您必须 return 一个 Item 对象,那么您应该声明一个默认的 Item 到 return 错误。如果您成功找到 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;
}

在没有找到 num 的任何匹配项的情况下,return 默认构造的 Item 有点尴尬,但是如果您想检测这种情况你总是可以做一些事情,比如将它初始化为你知道不能在你的库存中的 "bogus" 值。