我有以下类声明:
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 :(得分:1)
尝试
bool operator==(const DepthDescriptor& type) const;
bool operator>=(const DepthDescriptor& type) const;
bool operator<=(const DepthDescriptor& type) const;
答案 1 :(得分:0)
要实现转换,您应该编写全局函数而不是成员函数,并且应该是const-correct。即。
bool operator==(const DepthDescriptor& lhs, const DepthDescriptor& rhs)
{
...
}
如果使用成员函数,则左侧不会发生转换。除非你是const-correct,否则转换可能不会发生在符合标准的编译器中。