重载<当在另一个类中使用时,operator给出“没有匹配的调用函数”错误

时间:2012-09-12 13:48:45

标签: c++ operator-overloading

我实现了一个自定义的TimeStruct类,我在其中声明了<运营商如下

bool operator<(const TimeStruct t2) const;

实施如下。

bool TimeStruct::operator<(const TimeStruct t2) const
{
//do something, I don't include the actual implementation
return true;
}

然后我有另一个类X,这个TimeStruct类是一个成员,让我们调用这个成员字段Y.我正在使用一个向量,我想在X类的Y字段上对这个向量进行排序。因此我需要指定一个可以作为向量排序方法基础的方法。

因此我在X中声明了一个额外的方法来比较不同的X.

bool compareX(const X& x1, const X& x2) const;

,实施如下:

bool X::compareX(const X& x1, const X& x2) const
{
return (x1.Y.operator<(x2.Y));
}

不幸的是这段代码无法编译。我收到以下错误。

No matching function call for TimeStruct::operator<(const TimeStruct&) const
candidates are : bool TimeStruct::operator<(TimeStruct&) const

最后一小时我一直在摸头发,有人能指出我做错了什么。

2 个答案:

答案 0 :(得分:1)

您需要在TimeStruct运算符中传递 const引用

bool operator<(const TimeStruct& t2) const;

并且,根据错误消息,您已提供

bool operator<(TimeStruct&) const

答案 1 :(得分:1)

运算符声明中需要有一个const 引用说明符。

此外,您可能希望将operator<从成员函数转换为朋友函数。 这通常是最好的做法。