我正在研究基于文本的RPG,以在整个夏天保持我的编程知识(到目前为止,我已经学习了两个学期的C ++)。
无论如何,我一直在研究角色的库存系统,但遇到了问题。库存是Item
类型的数组(我已经做过)。 Item
的默认构造函数将其设置为“普通摇滚”,但我只希望在创建清单时将其完全清空。所以我想到了一种解决方法。创建库存时,请将库存中每个位置的地址设置为等于nullptr
:
Inventory::Inventory()
{
currentBPSize = 5;
backpack = new Item[MAX_BACKPACK_SIZE];
for(int i = 0; i < MAX_BACKPACK_SIZE; i++){
&backpack[i] = nullptr;
}
}
每当我运行此命令时,都会出现错误
需要左值作为赋值的左操作数
我在做什么错,还是我应该做些完全不同的事情?
答案 0 :(得分:2)
执行&backpack[i]
时,编译器会创建一个临时const
值,该值表示backpack[i]
的地址。这就是它随后尝试将nullptr
分配给的值。由于编译器创建的临时值是const(backpack[i]
的地址不变),因此编译器会在您尝试为其分配值时拒绝。
由于backpack
是对象数组,因此您也不能将它们设置为null。
如果我在制作游戏,并且我假设您的设计是背包中有固定数量的插槽,则可以执行以下操作之一:
Item
。这将是对设计的最小修改,但从长远来看可能不是很好(添加内容时,复制构造函数必须是完美的)。Item*
的数组(指向Item
的指针),然后它们将可以为空。但是,这将需要更多的内存管理。shared_ptr<Item>
的数组,这样就不必担心内存管理。正如其他评论者之一所说,我建议也使用std::vector
而不是原始数组,除非这样做只是为了学习更多有关数组和内存管理的知识。