У меня есть следующее объявление класса:
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
,
Пытаться
bool operator==(const DepthDescriptor& type) const;
bool operator>=(const DepthDescriptor& type) const;
bool operator<=(const DepthDescriptor& type) const;
Чтобы преобразование состоялось, вы должны написать глобальные функции, а не функции-члены, и вы должны быть const-правильными. То есть
bool operator==(const DepthDescriptor& lhs, const DepthDescriptor& rhs)
{
...
}
Преобразования не будут происходить слева, если вы используете функции-члены. Преобразования могут не происходить в стандартном совместимом компиляторе, если вы не const-корректны.