我正在尝试使用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
。这些都不起作用。为什么不?老实说,我不明白为什么。
非常感谢您的帮助。
答案 0 :(得分:0)
我不是C ++开发人员(我用纯c语言编写代码)。但据我了解错误输出,我认为错误在于:
; i != end();
在for
控制表达式中发生比较的位置(“在错误日志中由运算符==表示”)。
通常,在Foo& thing = i.value();
中受到影响的情况下,错误输出将以“不能影响X到Y”的形式出现。
答案 1 :(得分:0)
operator==
以便进行从remove
到QMap
元素的比较,因为QMap在搜索要删除的正确元素时执行相等检查。
可以这样定义,例如:
bool Foo::operator==(Foo& other)
{
return (a == other.a && /* etc */ xyz == bar.xyz);
}