2016-11-26 17 views
-3

C++で比較演算子を実装するソリューションを見つけようとしています。私は、その型の別の構造体と比較されるときはいつでも必要な構造体を持っています。私はここでオーバーロード構造体演算子

struct HuffNode{ 

    //Comparison stuff.. needed in Pqueue 
    bool operator> (const HuffNode&) const; 
    bool operator>=(const HuffNode&) const; 
    bool operator==(const HuffNode&) const; 
    bool operator<=(const HuffNode&) const; 
    bool operator< (const HuffNode&) const; 

}; 

私はこれが動作するかどうかを見に行くのかについての私のテストコードがある最小限のすべてを維持するために、コードの束を取り出しました。ちょうど2つのノード構造を定義し、それらを比較してみてください。今、私は今、私は単純に次のように定義された定数を持っている。

HuffNode *hn1 = new HuffNode(0,0,0,0); 
    HuffNode *hn2 = new HuffNode(0,0,0,0); 
    if(hn1 == hn2){ 
     cout << "HEYYYYYY111" << endl; 
    } 

..私はそれを定義したので==常にtrueを返しますので、文の「HEYYYYYY111は」常に印刷する必要がありますと思いましたテストのために、これは常にtrueを返し、上記のIfループが出力されます。しかし、そうではありません

bool HuffNode::operator==(const HuffNode &f) const { 
     return true; 
    } 

誰もがこれに対処する方法について考えていますか?私が考えることができる唯一のことは、正しい議論がないことです。私の目標は、テンプレートクラスでこれを使用して、2つの構造体を比較できるようにすることです。

+1

あなたはポインタを比較しています。代わりにオブジェクトを比較してください。 – juanchopanza

+0

同じではない可能性が高いポインタを比較しています。 –

+0

また、本当に1つの演算子clasically 'operator <'を実装する必要があります。他のすべての演算子は、この演算子の観点から実装することができます。 –

答えて

0

はちょうどこの操作を行います。「*」と

if(*hn1 == *hn2){ 
    cout << "HEYYYYYY111" << endl; 
} 

を、あなたは(この場合、オブジェクト内の)値にアクセスし、それはあなたのオーバーロードされたオペレーターを呼び出す必要があります。

関連する問題