C++动态库存系统——添加/删除项目
C++ Dynamic Inventory System--Adding/Removing Items
好的,所以我有一个C++中的文本驱动游戏。我写了一个英雄课。我还写了一个基类,名为Item,还有一个子类,名为Weapon(想法是让Weapons、Potions、QuestItems等继承自Item类)。这样,我就可以让我的"英雄"拥有一个实例变量的物品清单。我希望这是动态的,以防英雄获得存储空间的升级。
因此,我的Hero类有一个成员/实例变量,它是指向Items的指针的动态数组。我声明了这一点,然后循环通过它,将每个元素设置为一个新的Item,如下所示:
Item** inventory = new Item*[15];
for (int i = 0; i < 15; i++)
inventory[i] = new Item();
这发生在Hero类的void Init()函数中,所有构造函数都调用该函数(灵活构造)。现在,我试着写一个成员函数,将一个项目添加到清单中的第一个"空"插槽中,但这很难理解,当我测试程序时,我无法弄清楚是什么导致了程序崩溃。最终,当我试图访问数组的一个元素时,我发现它崩溃了。现在我只得到了这个片段,它假设第一个元素是空的,并试图在数组中"添加"给定给该索引的项:
void Hero::AddToInventory(Item *item)
{
*inventory[0] = item;
}
下面是我如何在main()中调用方法:
int main()
{
Hero *player = new Hero("Joe");
Item *primaryWeapon = new Item("Dagger");
player->AddToInventory(primaryWeapon);
return 0;
}
任何帮助都将不胜感激;我只是对C++中的动态对象和数据结构有点生疏。提前感谢!
p.S。我知道用矢量可以更简单地完成这项工作,但我还没有学会如何使用它们,现在我想坚持使用动态数组。
首先,首先用new Item()
初始化每个数组索引,然后用实际项替换分配的项,从而泄漏内存。最好一开始就有一个空指针数组。
Item** inventory = new Item*[15];
for (int i = 0; i < 15; i++)
inventory[i] = NULL;
我相信你也可以将数组初始化为null,如下所示:
Item** inventory = new Item*[15] = {NULL,};
现在,你说你有一个Item
的子类Weapon
,但我发现你从来没有使用过它。一旦你声明了new Item()
,它就属于Item类型,不再能够变形为像Weapon()
这样的派生类类型。因此,在这种情况下,要制造匕首武器,它应该看起来更像这样:
Item *primaryWeapon = new Weapon("Dagger");
最后,在AddInventoryToItem
期间发生崩溃,因为您在给定索引处取消引用Item
的实例,然后将其分配给指向Item
的指针,而不是直接指向Item
。试试这个:
void Hero::AddToInventory(Item *item)
{
inventory[0] = item;
}
还要注意,如果您只是简单地用新指针替换库存索引,也可能导致内存泄漏。但是,如果每个项都被初始化为null而不是new Item()
,并且您只将该项添加到一个空插槽中,那么这就不会有问题。
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 如何将 Lua 添加到C++项目
- 在动态数组中添加/删除C++元素
- 如何使用自制软件,cMake和cLion将库添加到C++项目中
- C++ 从链表中删除项目时出现问题
- 从 std::vector 中删除项目时"Iterator not incrementable"
- C++ N 个最后添加的项目容器
- 从 QTreeView 中删除项目时取消选择所有行
- 将Quazip添加到项目中
- 查找排序的容器,其中指向元素的指针在添加/删除时不会更改
- 从传递给新线程C++的矢量中删除项目
- 将CaringBuffer添加到项目中
- 将 GLEW 添加到项目 (CMake)
- 如何向/从矢量添加/删除<unique_ptr>?
- MSBuidel - 将资源文件添加到项目后静态库编译失败
- 如何创建一个函数,该函数可以从一个qtreewidget中删除项目并将其添加到另一个函数
- 使用指针在功能中的数组中添加/删除元素
- STD :: MAP-如何查找或添加,然后可以在一次搜索中删除项目
- C++动态库存系统——添加/删除项目
- 在QTableView的自定义模型中添加和删除项目