2017-04-23 8 views
-1

constを比較するために、C++クラスの 'より小さい'演算子をどのようにオーバーロードできますか?次のように私は私のクラスにオペレータ未満をオーバーロードするために「<」をしようとしています

//header file 

class HuffmanNode{ 
    private: 
    ... 
    ... 
    int frequency; 

    public: 
    ... 
    ... 
    bool operator<(const HuffmanNode &rhs); //overload less than operator 
}; 

//cpp file 

bool HuffmanNode::operator<(const HuffmanNode &rhs){ 
    return frequency < rhs.frequency; 
} 

私は次のようにノードを比較できるようにしたい:

bool HuffmanTree::compareNode(const HuffmanNode &a, const HuffmanNode &b){ 
    if (a < b){ 
    return true; 
    } 
    else{ 
    return false; 
    } 
} 

私が抱えている問題は、2つのノードをconstとして比較する方法を見つけることです。私は私のオペレータのオーバーロードメソッドは、constのとしてマークする必要がありますが、

const bool HuffmanNode::operator<(const HuffmanNode &rhs){ 
    return frequency < rhs.frequency; 
} 

const bool operator<(const HuffmanNode &rhs); 

とCPPファイルのコードにヘッダ内のコードを変更すると削除するようには思えないというエラーが出ますエラー。

私はthis solutionをチェックアウトしましたが、friendキーワードを使用してもうまくいきませんでした。

ありがとうございました!

+4

あなたは 'bool operator <(const HuffmanNode&rhs)const;'を使います。 'const'の位置に注意してください。 – songyuanyao

答えて

1

あなたの概念は、単に明確にする...キーワードのconstの使用及び位置について

を誤解している:

const T functionName(something); 

は、型TのごfuncionName戻って何かを意味し、それがあります定数

今、この:

T functionName(something) const; 

タイプTのごfuncionName戻って何かを意味し、そのメソッドがインスタンスで何も変更されていないとさえオブジェクトとそれを使用しても安全であるが第二のオプションは、あなたが探しているものですのconst

として宣言しましたfor ....

関連する問題