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/5pXu891FHashtable.h:
http://codepad.org/bMJomSi3Pair.h:
http://codepad.org/2sGxDLIpListNode.h:
http://codepad.org/FUFmFeG4main.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 inListe.hzuconst iterator &itr.
-
EOutOfResources schrieb:
Mach den Parameter des
!=-Operator inListe.hzuconst iterator &itr.Ich würde gleich kopieren, also
iterator itranno, 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.