我正在尝试使用一个简单的结构作为地图键:
class Foo{
.
.
.
struct index{
int x;
int y;
int z;
};
bool operator<(const index a, const index b);
.
.
.
}
函数itslef:
bool Foo::operator<(const index a, const index b){
bool out = True;
if (a.x == b.x){
if (a.y == b.y){
if (a.z >= b.z) out = false;
}
else if(a.y > b.y) out = false;
} else if (a.x > b.x) out = false;
return out;
}
然而,当我编译时,我得到一个错误:
memMC.h:35:错误:'bool Foo :: operator&lt;(Foo :: index, Foo :: index)'必须只有一个参数
据我了解,编制者希望将index
与此Foo
进行比较。那我怎么能超载操作员?
答案 0 :(得分:3)
如果要比较两个索引,请在index
结构中移动重载:
struct index{
int x;
int y;
int z;
bool operator<(const index& a) const;
};
如果你想比较一个Foo
和一个index
(我怀疑这一点,但我只是把它放在这里以防万一),删除第二个参数,因为它不需要:< / p>
class Foo{
//...
bool operator<(const index& a) const;
};
请注意,您应该通过引用传递index
参数,以防止不必要的复制。
编辑:正如Als正确指出的那样,此运算符应为const
。
答案 1 :(得分:2)
<
是二进制中缀比较运算符,即它需要两个参数相互比较,所以理想情况下它应该实现为自由函数,但是如果你将它实现为成员函数那么它只需要一个论点。
它应该将作为参数传递的参数与调用成员函数的对象进行比较。
您的会员比较运营商应该是:
class Foo
{
//...
bool operator<(const index& rhs) const
{
/* comparison with *this */
}
//...
};