我想编写一个与std :: set兼容的类,所以我像这样重载“小于”运算符。它有效。
bool Segment::SVertex::operator<(const SVertex &rhs) const
{
return id < rhs.id;
}
然而,由于我编写的Java不仅仅是C ++,'rhs.id'对我来说非常不舒服。所以我把它改成'rhs.getId()',其中getId()只是一个普通的getter函数:
long SVertex::getId(){return id;}
这结果是一个编译时错误:无法将“this”指针从“const Segment :: SVertex”转换为“Segment :: SVertex&amp;”
(请注意我的VS2008不是英文,我翻译了错误信息,所以上面的行不一定完全正确)
我只知道'&amp;'表示通过引用传递,'const'禁止任何更改。我并不完全理解幕后发生的事情。
答案 0 :(得分:7)
问题是你的getter函数并不完全'正常';你的吸气者应该是
long SVertex::getId() const
{return id;}
注意最后的 const :它告诉编译器/用户此方法不会修改类的内部。因此,可以在您的运营商中使用它&lt;这也是const。 如果const成员函数也是const,则它们只能调用其他成员函数;非const成员函数可以调用任何。
答案 1 :(得分:5)
你的吸气剂必须是恒定的:
long SVertex::getId() const {return id;}
这表示它不会改变对象。
答案 2 :(得分:2)
您的rhs
是const
,因此您无法进行更改。另一方面,你的getId
不承诺不改变this
- 它也需要是const:
int SVertex::getId() const { return id; }