4

オーバーロードされた operator== を含むオブジェクトを作成しました。

    class Corridor
    {
    public:
       Corridor(int iStart, int iEnd);
        ~Corridor();

        // Overloaded operators to simplify search in container.
        friend bool operator==(const Corridor& lhs, const int rhs);
        friend bool operator==(const int lhs, const Corridor& rhs);

    protected:
        int m_iIntersectionIDStart;
        int m_iIntersectionIDEnd;
    };

この場合、コリドーのベクトルをどこかに作成すると、次のようになります。

    vector<Corridor> m_vCorridors;

プログラムは正常に動作し、find アルゴリズムを使用できます。

    auto itCorridor = find(m_vCorridors.begin(), m_vCorridors.end(), someID);

しかし、ポインターのベクトルを作成する場合:

    vector<Corridor*> m_vCorridors;

次のエラーが表示されます: エラー 1 エラー C2446: '==' : no conversion from 'const int' to 'Corridor *' c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 41 エラー 2 エラーC2040: '==': 'Corridor *' は 'const int' c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 41 とは間接的なレベルが異なります

operator== をさまざまな方法でオーバーロードしようとしましたが、この場合は機能しません。問題を解決するために何をすべきか誰かが知っていますか?

4

1 に答える 1

9

これは、 がへfindのポインターを と比較しようとしているためです。を再度比較するには、 を使用して独自のコンパレータを定義する必要があります。C++11 ラムダを使用できると仮定すると、CorridorintCorridorintfind_if

find_if(m_vCorridors.begin(), m_vCorridors.end(), [=](Corridor* cp) {
    return *cp == someID;
});
于 2013-06-14T16:32:52.730 に答える