Неявное преобразование для сопоставления аргумента оператора

У меня есть следующее объявление класса:

class DepthDescriptor
{
public:
DepthDescriptor(DepthType depth);
bool operator==(DepthDescriptor& type);
bool operator>=(DepthDescriptor& type);
bool operator<=(DepthDescriptor& type);
...
}

Почему следующая строка не выполняет неявное преобразование в DepthDescriptor объект, чтобы оператор сравнения мог иметь место?

if (depth == Depth_8U)
{
...
}

Обратите внимание, что depth это DepthDescriptor объект, DepthType это перечисление, и Depth_8U является одним из значений перечисления. Я надеялся, что строки, подобные приведенной выше, сначала вызовут неявный конструктор DepthDescriptor(DepthType depth) а потом соответствующий оператор, но я получаю no operator "==" matches these operands,

0

Решение

Пытаться

bool operator==(const DepthDescriptor& type) const;
bool operator>=(const DepthDescriptor& type) const;
bool operator<=(const DepthDescriptor& type) const;
1

Другие решения

Чтобы преобразование состоялось, вы должны написать глобальные функции, а не функции-члены, и вы должны быть const-правильными. То есть

bool operator==(const DepthDescriptor& lhs, const DepthDescriptor& rhs)
{
...
}

Преобразования не будут происходить слева, если вы используете функции-члены. Преобразования могут не происходить в стандартном совместимом компиляторе, если вы не const-корректны.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector