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

标签 c++ list compiler-errors iterator constants

我的角色类中有两个函数:

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/

相关文章:

c# - 如何摆脱编译器错误: C# use of unassigned local variable?

c++ - 无法将QString转换为Const Char *

c++ - 如何在基于 ffmpeg 的程序中以编程方式传递 VP8 编码器选项

java - 将 Java 转换为 C++ : Templates vs. 泛型

c# - 当类不使用 JSON 字符串提供的所有属性时,将 JSON 字符串转换为类

list - 如何将 Scheme 中的函数应用于另一个函数返回的参数列表?

c++ - 如何从 Boost::GIL View 类型中提取 channel 类型?

c++ - NuiApi.h 在 Visual Studio 2012 DLL 项目中包含失败

python - 创建位列表?

Java - 扫描仪错误和打印错误