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
};
而您的 items
是 Item
的 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" 值。
正在创建库存 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 getItem
object from the integer value.
好的,你已经很接近了。根据您的描述,听起来 Item
被定义为
struct Item
{
std::string name;
int numItem; ///< search for this value
};
而您的 items
是 Item
的 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" 值。