Problem mit dem != Operator in template Klasse



  • Hallo,

    ich habe ein Problem mit dem überladenen != Operator. Irgendwie will da die Compilierung nicht funktionieren.

    Folgende Fehlermeldung bekomme ich:

    src/Hashtable.h: In member function ‘bool Hashtable<type>::put(std::string, type) [with type = int]’:
    src/main.cpp:41:   instantiated from here
    In file included from src/main.cpp:11:
    src/Hashtable.h:71: error: no match for ‘operator!=’ in ‘itr != ((Hashtable<int>*)this)->Hashtable<int>::mtable.List<type>::end [with type = Pair<int>]()’
    src/List.h:45: note: candidates are: bool List<type>::iterator::operator!=(List<type>::iterator&) [with type = Pair<int>]
    

    Hier ist die Liste.h:
    http://codepad.org/5pXu891F

    Hashtable.h:
    http://codepad.org/bMJomSi3

    Pair.h:
    http://codepad.org/2sGxDLIp

    ListNode.h:
    http://codepad.org/FUFmFeG4

    main.cpp:
    http://codepad.org/sWYe2xWt



  • Bitte beschränke dich auf das Wesentlichste. Sonst schaut sich das niemand an.



  • Hier in diesem Code abschnitt tritt der Fehler auf bei der Verwendung des != Operators, alledings weiß ich nicht genau warum das nicht funktioniert.

    //--------------------------------------------------
    
            bool put(string key, type value) {
    
                int hash_value;
                typename List<Pair<type> >::iterator itr;
                Pair<type> *pair;
    
                hash_value = hashcode(key);
    
                itr = mtable.begin();
    
                while(itr != mtable.end()) {
    
                    //pair bb = *itr;                          
    
                    //itr++;
    
                }  
    
            }
    


  • Mach den Parameter des != -Operator in Liste.h zu const iterator &itr .



  • EOutOfResources schrieb:

    Mach den Parameter des != -Operator in Liste.h zu const iterator &itr .

    Ich würde gleich kopieren, also

    iterator itr
    

    anno, poste lieber gleich den Code, aber weniger als 50 Zeilen. Bei externen Links schauen sich viel weniger Leute dein Problem an, zudem wird der Code nach einiger Zeit gelöscht.



  • Du solltest dich mal mit const-correctness beschäftigen.
    Dein Problem liegt darin, daß begin() und end() temporäre Objekte zurückgeben und dein Vergleichsoperator eine (nicht-konstante) Referenz erwartet - d.h. es benötigt eine "echte" Variable und keinen temporär gültigen Wert.


Anmelden zum Antworten