0

次のクラス宣言があります。

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

DepthDescriptor演算子の比較ができるように、次の行がオブジェクトへの暗黙的な変換を実行しないのはなぜですか?

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

depthDepthDescriptorオブジェクトでDepthTypeあり、は列挙型でありDepth_8U、列挙値の 1 つであることに注意してください。上記のような行が最初に暗黙のコンストラクターを呼び出し、DepthDescriptor(DepthType depth)次に適切な演算子を呼び出すことを望んでいましたが、 no operator "==" matches these operands.

4

2 に答える 2

1

試す

bool operator==(const DepthDescriptor& type) const;
bool operator>=(const DepthDescriptor& type) const;
bool operator<=(const DepthDescriptor& type) const;
于 2012-11-19T09:28:47.873 に答える
0

変換を行うには、メンバー関数ではなくグローバル関数を記述し、const-correct にする必要があります。いえ

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

メンバー関数を使用する場合、左側では変換は行われません。const が正しい場合を除き、標準準拠のコンパイラでは変換が行われない場合があります。

于 2012-11-19T09:31:34.307 に答える