2012-01-13 3 views
0

を見つける::次のような構造に見つける...エラー::私はSTDを使用して、エラーを取得しています演算子==

struct ComplianceOrderRecord { 
    explicit ComplianceOrderRecord(IOrder& order); 
    bool operator ==(const ComplianceOrderRecord& other) const; 
    double price; 
}; 

inline bool ComplianceOrderRecord::operator ==(const ComplianceOrderRecord& other) const { 
    return price == other.price; 
} 

を次のように私はそれを使用する...

inline void Compliance::RemoveComplianceOrderRecord(const ComplianceOrderRecord& order) { 
    auto it = std::find(m_compliantOrderList.begin(), 
    m_compliantOrderList.end(), order); 
    if(it == m_compliantOrderList.end()) { 
     return; 
    } 
    m_compliantOrderList.erase(it); 
} 
エラーがある

...

error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const ComplianceOrderRecord' (or there is no acceptable conversion) 

このエラーを理解する上で任意のヘルプは非常に高く評価されるだろう。

+0

これを 'const'に更新すると、私は同じ結果になります。 – andre

+0

'm_compliantOrderList'の宣言を教えてください –

答えて

1

をないcontainer<ComplianceOrderRecord >。(おそらくそれは、ポインタ、またはいくつかの他の全く関係のないクラスのコンテナです。


編集:

ComplianceOrderRecordの2つのインスタンスを比較することができますが、findはオブジェクトとポインタを比較する必要があります。

struct RecordIsEqualTo 
    { 
     const ComplianceOrderRecord* record; 
     RecordIsEqualTo(const ComplianceOrderRecord& r): record(&r) {} 
     bool operator() (const ComplianceOrderRecord* r) const { return *record == *r; } 
    }; 

    std::find_if(m_compliantOrderList.begin(), m_compliantOrderList.end(), 
     RecordIsEqualTo(order)); 

またはそのラムダバージョン:あなたのような、カスタム述語でfind_ifを使用できるように、比較のこの種を実行するための演算子をオーバーロードすることは、奇妙なことでしょう。

+0

含まれているのは 'std :: list m_compliantOrderList; 'と定義されています。 – andre

+0

このソリューションは私にとって完璧に機能します。ありがとう。 – andre

5

operator==は、constのメンバーである必要があります。

+0

+1ランダムダウンボトム – rubenvb

+2

フリースタンディング関数についての良い点は、彼のクラスが暗黙の変換をサポートしているからです。メンバーとして、 'aComplianceOrderRecord == anIOrder'は合法ですが、' anIOrder == aComplianceOrderRecord'はそうではありません。 (暗黙的な変換を取り除くには、一般的にはコンストラクタを 'explicit'にしていますが、ここで欲しいのかどうかわかりません) –

+0

良いキャッチで、私はコンストラクタを明示的にしました。 – andre

1

operator==の機能はconstである必要があります。それは、あなたはconstオブジェクト(またはconstへの参照でそれを呼び出すことはできません

0

constの方法試してみてください:m_compliantOrderListがある場合、このエラーを再現することができ

inline bool ComplianceOrderRecord::operator ==(const ComplianceOrderRecord& other) const { 
return price == other.price; 

}

+0

'const'を追加しても、残念なことに私の問題は解決されません。 – andre

関連する問題