-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;
}

次に、このTimeStructクラスがメンバーである別のクラスXがあり、このメンバーフィールドをYと呼びます。ベクトルを使用しており、このベクトルをクラスXのYフィールドで並べ替えます。したがって、メソッドを指定する必要があります。これは、ベクトルのsortメソッドの基礎として役立つ可能性があります。

したがって、異なる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

私はこの1時間髪を引っ掻いてきましたが、私が間違っていることを誰かが指摘できますか。

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 に答える