我的角色类中有两个函数:
void Character::dropItem(const Item & item)
{
for (list<const Item*>::iterator i = playerInventory.inventory.begin(); i != playerInventory.inventory.end(); i++) {
if ((*i) == &item) {
playerInventory.inventory.erase(i);
break;
}
}
}
double Character::getTotalWeight() const
{
for (list<const Item*>::iterator i = playerInventory.inventory.begin(); i != playerInventory.inventory.end(); i++) {
}
}
但是,Visual Studio 给我一个错误
Error C2440 'initializing': cannot convert from 'std::_List_const_iterator<std::_List_val<std::_List_simple_types<_Ty>>>' to 'std::_List_iterator<std::_List_val<std::_List_simple_types<_Ty>>>'
在 getTotalWeight() 中 for 循环的第一条语句中的playerInventory 上。 我不明白为什么会发生这个错误,因为它实际上与上面的函数是同一个循环。任何见解都值得赞赏。
最佳答案
该函数是常量成员函数
double Character::getTotalWeight() const
因此数据成员playerInventory.inventory
被视为常量数据成员。因此,您可能不会使用非常量迭代器。
改写
for (list<const Item*>::const_iterator i = playerInventory.inventory.cbegin(); i != playerInventory.inventory.cend(); i++) {
这是成员函数 begin
返回一个 const_iterator
当您尝试将其分配给 iterator
时,并且从第一个开始没有相应的转换迭代器类型转换为第二个迭代器类型。
关于C++ 列表迭代器无法初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079663/