"<"-Operator überladen
-
Danke ihr beiden erstmal für eure schnellen Antworten

Die Sache mit den Adressen leuchtet mir jetzt ein, das Problem ist nur, dass wenn ich den Operator so
if (*a < *b) ... ;aufrufe, dann meint der compiler
no match für "operator<" in "*a < *b"Das Problem ist halt, dass ich nur Zeiger auf die Klassen hernehmen kann und relativ einfache Aufrufe brauche...
-
Deklariere operator< mit const Key &rhs dann müsste es klappen.
Alternativ könnte die Überladung von ::operator<(Key *a, Key *b) klappen...
-
LordJaxom schrieb:
Alternativ könnte die Überladung von ::operator<(Key *a, Key *b) klappen...
unwahrscheinlich, daß der compiler das zuläßt. wenn man damit anfängt, kommt motgen einer und überlädt den op< für integers.
-
Stimmt, geht nicht... War davon abgesehen ein unschöner Vorschlag

-
Hallo nochmal,
hab jetzt mal versucht, euren Vorschlag
bool operator<(const Key& compKey) { if (strcmp(key, compKey.getKey()) < 0) return true; else return false; }bei mir einzubauen, aber meinem Compiler hat das überhaupt nicht gefallen ("Übergabe als this-Argument streicht Qualifizierer", oder so ähnlich). Jetzt habe ich festgestellt, dass das Problem offensichtlich darin liegt, dass die Variable "key", die klassenintern den Hash-Wert speichert, bei mir privat ist, und ich darauf per "getKey()" zugreife. Wenn ich sie dagegen public deklariere und innerhalb des Operators direkt darauf zugreife, funktioniert alles:
strcmp(key, compKey.key)Allerdings hätte ich schon gerne, dass man den Wert von außen nicht ohne weiteres ändern kann. Gibt's da vielleicht einen Weg?
Vielen Dank aber schon jetzt für eure Hilfe, das hat mich schon jetzt sehr viel weiter gebbracht...
-
class Key { ... private: char *key; ... public: bool operator<(const Key &t_key) { return strcmp(key, t_key.key) < 0 ? true : false; } ... };mein compiler macht da keinen stress.
Meep Meep
-
Hm, hab wohl gedacht, dass
compKey.keyhier nicht gehen würde, weil "compKey" eine andere Instanz sei und man deshalb von hier aus nicht auf deren private variable "key" zugreifen könne.
Tja, und ich dachte, ich hätte alles ausprobiert... So läuft es jedenfalls bei mir auch. Vielen Dank nochmal an alle, ist ein wirklich tolles Forum!!
-
Meep Meep schrieb:
class Key { ... private: char *key; ... public: bool operator<(const Key &t_key) { return strcmp(key, t_key.key) < 0 ? true : false; } ... };mein compiler macht da keinen stress.
Meep Meep
sollte er auch nicht. allerdings gibt es keinen grund, dass dieser operator non-const ist. und auf das
x?true:falseidiom können wir nun wirklich verzichten

-
camper schrieb:
und auf das
x?true:falseidiom können wir nun wirklich verzichten

stimmt.
es mussreturn !!(strcmp(key, t_key.key) < 0);heißen.
-
Warum nicht
return !((strcmp(key, t_key.key) < 0) ? false : true)
-
LordJaxom schrieb:
Warum nicht
return !((strcmp(key, t_key.key) < 0) ? false : true)weil es nicht notwendig ist, das zweimal zu machen.
-
Achso, verstehe
