我正在尝试从向量中删除特定元素,但是当我使用erase(删除)函数时,我收到此错误:
[...] / v1 / algorithm:2139:24:二进制表达式的无效操作数('Component'和'const Component')
我在班级和班级之外搜索了一个解决方案,定义了==运算符,但我找不到它为什么不起作用。
以下是代码:
void OGWindow::deleteSquare( Component *squPtr )
{
cout << "Deleting component " << squPtr->getIndex() << endl;
compVector.erase(std::remove(compVector.begin(), compVector.end(), *squPtr), compVector.end());
}
运营商==:
bool Component::operator==(Component& c){
return this->getIndex() == c.getIndex();
}
组件索引与向量无关。
感谢。
编辑:此运算符重载有效:
bool Component::operator==(const Component& c) const{
return this->index == c.index;
}
答案 0 :(得分:1)
std::remove
需要const引用作为要比较的值。尝试在const
中引入一些operator==
修饰符:
bool Component::operator==(const Component& c) const
这反过来要求Component::getIndex()
当然也是const
,所以要做好准备。
如果您不想制作operator==
const,则可以始终使用std::remove_if
代替std::remove
并使用自定义谓词 - 它甚至可以包含非const值并调用你喜欢的任何方法。
一般情况下,如果可以使用const
,那通常是个好主意。