无法从QMultiMap中删除项目,导致编译时错误

时间:2019-08-12 08:13:10

标签: c++ qt dictionary multimap

我正在尝试使用QMultiMap::remove函数删除通过迭代QMultiMap找到的项目。该过程看起来像这样(这是在扩展QMultiMap的类中定义的函数中,该类本身扩展了QMap):

for (auto i = begin(); i != end(); i++) {
    Foo& thing = i.value();
    if (shouldRemove) {
        remove(i.key(), thing);
    }
}

i.key()的类型为Bar

但是这会导致错误:编译器说不能在类型==Foo上使用运算符const Foo。为了解决这个问题,在上面的代码中,我将Foo&更改为const Foo&。我犯了同样的错误。我尝试过的另一件事是将其更改为Foo,甚至是const Foo。这些都不起作用。为什么不?老实说,我不明白为什么。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我不是C ++开发人员(我用纯c语言编写代码)。但据我了解错误输出,我认为错误在于:

; i != end();

for控制表达式中发生比较的位置(“在错误日志中由运算符==表示”)。

通常,在Foo& thing = i.value();中受到影响的情况下,错误输出将以“不能影响X到Y”的形式出现。

答案 1 :(得分:0)

需要明确定义

operator==以便进行从removeQMap元素的比较,因为QMap在搜索要删除的正确元素时执行相等检查。

可以这样定义,例如:

bool Foo::operator==(Foo& other)
    {
    return (a == other.a && /* etc */ xyz == bar.xyz);
    }