从向量中删除元素:二进制表达式的操作数无效

时间:2017-02-21 11:19:56

标签: c++ vector

我正在尝试从向量中删除特定元素,但是当我使用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;
}

1 个答案:

答案 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,那通常是个好主意。