gpt4 book ai didi

C++ 列表迭代器无法初始化

转载 作者:行者123 更新时间:2023-11-30 04:41:36 25 4
gpt4 key购买 nike

我的 Character 类中有两个函数:

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 returna const_iterator 当你试图将它分配给 iterator 并且从第一个没有相应的转换迭代器类型到第二个迭代器类型。

关于C++ 列表迭代器无法初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com