使用.push_back将新创建的项目添加到库存
Adding Newly Created Items To An Inventory Using .push_back
all!我正在创建一个库存类。以下是到目前为止我对实现文件的内容:
//aItem .cpp implementation file
#include "stdafx.h"
#include "aitem.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//setting this up default
aItem::aItem()
{
vector<aItem> inventory;
mitemName = "Default Name";
mitemType = "Default Type";
mdamage = 9001;
}
void aItem::ItemList()
{
for( vector<aItem>::size_type index = 0; index < inventory.size(); index++ )
{
//Makes a numerical list.
cout << "Item " << index + 1 << ": " << inventory[index].mitemName << endl;
index+= 1;
}
}
void aItem::ItemAdd(string itemName, string itemType, int damage)
{
mitemName = itemName;
mitemType = itemType;
mdamage = damage;
inventory.push_back
ItemAdd() 中间的突然切割是我的问题。如果我没有从我知道名称的列表中提取它,如何将新创建的项目添加到我的库存向量中?
首先,你应该使用 m_name 而不是 mitemName,它更容易阅读,并且使用更广泛。
现在到你的实际问题,你有一个名为aItem的库存,它包含aItems的向量...这是您的问题,为项目创建一个类,为库存创建一个类(如果需要)。他们不能在同一个班级。
所以在这里我创建了我的物品类(我称之为 Item,如果你愿意,你可以称你的 aItem ),它只控制项目的名称、类型和损坏。
#ifndef ITEM_H
#define ITEM_H
#include <string>
class Item {
public:
Item();
virtual ~Item();
virtual void setName(std::string name);
virtual std::string getName();
virtual void setType(std::string type); // consider enum for types here
virtual std::string getType();
virtual void setDamage(int damage);
virtual int getDamage();
private:
std::string m_name;
std::string m_type;
int m_damage;
};
#endif // ITEM_H
我想你可以自己编写.cpp
面,那就是头文件。
这是我的Inventory.h
,您可以再次重命名以符合您的喜好。
#ifndef INVENTORY_H
#define INVENTORY_H
#include "item.h"
#include <vector>
class Inventory {
public:
Inventory();
virtual ~Inventory();
virtual void addItem(Item* item);
virtual void removeItem(int index); // You could implement removeItem(Item* item); too
private:
std::vector<Item*> m_items;
};
#endif // INVENTORY_H
现在,如果您需要更多内容,可以自由地将任何方法实现到这些类中的任何一个。
如果您的库存不需要像其他人建议的那样是自己的类,则可以在引用需要时将其传递给项目类。这可能不是最好的方法,但你不必编写另一个类。
例如。
int main(){
aItem sword("wooden","sword", 5);
aItem axe("stone", "axe", 15);
std::vector<aItem> inventory;
sword.addTo(inventory);
axe.addTo(inventory);
...
并在 aItem.cpp:
void aItem::add(std::vector<aItem> &inventory){
inventory.push_back(*this);
}
或者,如果要处理内存问题而不是范围问题,则可以改用指针:
int main(){
aItem* sword = new aItem("wooden","sword", 5);
aItem* axe = new aItem("stone", "axe", 15);
std::vector<aItem*> inventory;
sword->addTo(inventory);
axe->addTo(inventory);
...
并在 aItem.cpp:
void aItem::add(std::vector<aItem*> &inventory){
inventory.push_back(this);
}
但同样,在几乎所有情况下,正确处理范围或内存管理的清单类将比这更好。
所以你有一个名为 aItem 的类,它应该是一个"项目"并且还存储库存? 听起来您需要另一个类来维护包含项目向量的库存。
其次,您现在有一个堆栈变量作为您的库存。 一旦你的构造函数超出范围,它就消失了。
最后,您需要创建一个临时"项目"以添加到库存中。 这就是被推回去的原因;
相关文章:
- 将项目添加到队列时运行线程
- 如何使用矢量元素将项目添加到结构中?
- 本机 Nuget 包安装在 VS 中,但没有为C++(本机)项目添加引用
- 如何将多个 QStringList 中的项目添加到一个
- CMake 和/或在为项目添加提升时出错
- 我无法将项目添加到 ( 标准::矢量 < 标准::矢量 <标准::字符串> > )
- 计数器将项目添加到数组中,并剩余
- 将CMAKE项目添加到Visual Studio解决方案中
- 如何使用QListView项目添加复选框
- C++将项目添加到集合中
- 在MFC中的树(ctreectrl)中的特定树项目添加图标
- 如何将类的项目添加到C 的数组中,而无需给它们命名
- 如何将项目添加到输出文件中
- CMAKE将新项目添加到解决方案中
- 如何将项目添加到QT中的布局中
- 将项目添加到双向链表的背面时遇到问题
- 捕获非默认文件夹上的项目添加事件
- wxWidgets-通过DLL将项目添加到sizer
- 使用.push_back将新创建的项目添加到库存
- 如何将MFC应用程序项目添加到Visual C 2008中的Win32应用程序项目