STL: Problem mit find()



  • Hallo, ich habe ein problem mit find(). Und zwar habe ich eine einfache Klasse:

    class TKennzTyp
    {
    public:
        string  sName;
        string  sKZ;
        string  sFileName;
        version vVersion;
        int     iImage;
        int     iFileSize;
    };
    bool operator==(TKennzTyp &kt1, TKennzTyp &kt2) {return kt1.sFileName == kt2.sFileName;};
    

    Jetzt möchte ich einen vector mittels find() durchsuchen

    vector<TKennzTyp> v1;
    TKennzTyp kt1, kt2;
    
    //...Hier steht Initialisierungskram, den ich nicht poste...
    
    vector<TKennzTyp>::iterator it = find(v1.begin(), v1.end(), kt); //Fehler
    
    // "==" geht aber
    if(kt1 == kt2)  //das geht allerdings
    {
      //...
    }
    

    Es kommt ein Compiler Fehler "Operator '==' not implemented in type 'TKennzTyp' for arguments of the same type" in _algobase.c, wo find() implememntiert ist.
    Also hab ich "==" in der Klasse definiert:

    class TKennzTyp
    {
    public:
        string  sName;
        string  sKZ;
        string  sFileName;
        version vVersion;
        int     iImage;
        int     iFileSize;
        bool    operator==(TKennzTyp &kt) {return sFileName == kt.sFileName;};
    };
    

    Der Effekt bleib allerdings der selbe.
    Kann mir da jemand helfen, muß man vielleicht noch was anderes überladen für find() oder was muß man tun ? Bin echt planlos....



  • der op mus const sein.
    coperator == (...) const



  • Hallo,

    genau so funktioniert es.
    Beide Varianten gehen...

    bool operator==(TKennzTyp const &kt1, TKennzTyp const &kt2) {return kt1.sFileName == kt2.sFileName;}; //außerhalb der Klasse
    
    //oder
    
    class TKennzTyp
    {
    public:
        string  sName;
        string  sKZ;
        string  sFileName;
        version vVersion;
        int     iImage;
        int     iFileSize;
        bool    operator==(TKennzTyp const &kt) {return sFileName == kt.sFileName;};
    };
    

    Danke!!!


Anmelden zum Antworten