-2

我实现了一个自定义 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

过去一个小时我一直在抓头发,谁能指出我做错了什么。

4

2 回答 2

1

您需要在运算符中通过const 引用TimeStruct

bool operator<(const TimeStruct& t2) const;

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

bool operator<(TimeStruct&) const
于 2012-09-12T13:50:48.060 回答
1

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

此外,您可能希望将operator<成员函数转换为友元函数。这通常是最佳实践。

于 2012-09-12T13:53:23.327 回答