Я портирую класс, который реализует IEquatable<T>
и IComparable<T>
и переопределяет ==
, !=
, <
и >
из C # в C ++ / CLI. Пока что у меня есть:
Заголовок:
virtual bool Equals(Thing other);
virtual int CompareTo(Thing other);
static bool operator == (Thing tc1, Thing tc2);
static bool operator != (Thing tc1, Thing tc2);
static bool operator > (Thing tc1, Thing tc2);
static bool operator < (Thing tc1, Thing tc2);
Исходный файл:
bool Thing ::Equals(Thing other)
{
// tests equality here
}
int Thing ::CompareTo(Thing other)
{
if (this > other) // Error here
return 1;
else if (this < other)
return -1;
else
return 0;
}
bool Thing ::operator == (Thing t1, Thing t2)
{
return tc1.Equals(tc2);
}
bool Thing ::operator != (Thing t1, Thing t2)
{
return !tc1.Equals(tc2);
}
bool Thing::operator > (Thing t1, Thing t2)
{
// test for greater than
}
bool Thing::operator < (Thing t1, Thing t2)
{
// test for less than
}
Я не уверен, почему оригинал проверил равенство в интерфейсе и сравнил вещи в операторе, но я пытаюсь сохранить оригинальную структуру.
В любом случае, я получаю ошибку компиляции в отмеченной строке: "error C2679: binary '>' : no operator found which takes a right-hand operand of type 'ThingNamespace::Thing' (or there is no acceptable conversion)
" и соответствующую ошибку двумя строками ниже. Почему он не улавливает существование перегруженного оператора?