Operator "<" overloading
-
Servus,
ich hab eine eigene Klasse Datum ("Date") geschrieben und dafür den "<" (kleiner) Operator überladen... Sieht so aus:
bool Date::operator< (const Date& d2) const{ if(this->year != d2.year){ return this->year < d2.year ? true : false; } else if(this->mon != d2.mon){ return this->mon < d2.mon ? true : false; } else if(this->day != d2.day){ return this->day < d2.day ? true : false; } else if(this->hour != d2.hour){ return this->hour < d2.hour ? true : false; } else if(this->min != d2.min){ return this->min < d2.min ? true : false; } else if(this->sec != d2.sec){ return this->sec < d2.sec ? true : false; }else{ /*markierung*/ return false; } }Doch beim Aufruf:
while(*begin < *end){Springt er direkt aus der Schleife heraus, obwohl *begin kleiner als *end IST. (hab's mir auch ausgeben lassen, es ist kleiner!)
Ich rufe das ganze übrigens bewusst mit Pointern auf (damit er das ganze Zeug nicht immer kopiert ;))Mit dem Debugger habe ich herausgefunden, dass er immer bis zum else geht (/*markierung*/).
Aber warum funktionieren die Vergleiche nicht? (alle Werte sind unsigned short, nur year ist unsigned long)Vielen Dank für Hilfe

-
Hi,
poste doch mal ein ausführbares Minimalbeispiel, der < operator sieht erstmal korrekt aus, der Fehler wird also wohl woanders liegen. Ansonsten ist
return this->year < d2.year ? true : false;nicht besonders hübsch,
return this->year < d2.year;tut es genauso.
-
oh stimmt... da hab ich mal wieder zu kompliziert gedacht.
mir ist grad aufgefallen, da stimmt nochwas nicht... Bei Eingabe 11.11.1111 11:11 ist this->year = 2010 !?
Ok, da muss ich nochmal schauen... Danke erstmal, ich meld mich wieder, wenn ich es eingegrenzt habe (oder vllt find ich's ja selbst)

-
bool operator< (const Date& lhs, const Date& rhs) { if(lhs.year != rhs.year) return lhs.year < rhs.year; if(lhs.mon != rhs.mon) return lhs.mon < rhs.mon; if(lhs.day != rhs.day) return lhs.day < rhs.day; if(lhs.hour != rhs.hour) return lhs.hour < rhs.hour; if(lhs.min != rhs.min) return lhs.min < rhs.min; return lhs.sec < rhs.sec; }guck mal - schon kann man es lesen - allerdings liegt der Fehler nicht hier...
Jz musst du nur noch die Variablennamen durch Getter-Fkt-Aufrufe ersetzen (da der op< nicht wirklich ein Member sein sollte^^)
Die Variablennamen find ich nebenbei gesagt auch relativ hässlich - schreib sie doch einfach aus - wird dich auch nicht umbringen ;o)bb