我正在尝试重载'&lt;'运算符,以便我可以在项目中使用std :: map。类定义中的原型如下所示:bool operator<(const Vertex&);
,函数体如下所示:
bool Vertex::operator <(const Vertex& other){
//incomplete, just a placeholder for now
if(px != other.px){
return px < other.px;
}
return false;
}
我得到的错误是:/usr/include/c++/4.7/bits/stl_function.h:237:22: error: passing ‘const Vertex’ as ‘this’ argument of ‘const bool Vertex::operator<(Vertex)’ discards qualifiers [-fpermissive]
答案 0 :(得分:1)
您的功能需要const
限定符:
bool Vertex::operator <(const Vertex& other) const {
//...
}
这意味着可以在const
个对象上调用它。
答案 1 :(得分:1)
由于operator<
重载不会修改this
指向的对象,因此您应将其标记为const
成员函数。也就是说,对于声明,在末尾添加const
:
class Vertex {
// ...
bool operator<(const Vertex& other) const;
// ...
};