Überladen von operator< --- wo ist mein Fehler?
-
ups, das war ein versehen, da oben muss es heißen:
bool operator <(Fahrzeug* f);
ändert aber nichts
-
müsste eigentlich nur mit
f2->operator<(f)
weil das Zeiger sind. Da werden dann nur die Adressen verglichen.
Versuch doch mal einen Operator(global als friend) operator <(const Fahrzeug &f1, const Fahrzeug &f2) zu machen
-
leeny555 schrieb:
Noch zur Anmerkung: Wenn ich in der letzten Zeile "if (f2.operator<(f))" statt if (f2 < f) schreibe, klappt alles!
Jo, das ist logisch. Mit f2<f vergleichst Du die Zeiger. Wenn Du das haben willst mußt Du nen
bool operator<(Fahrzeug * lhs, Fahrzeug * rhs); implementieren.
Zum Beispiel könnte der einfach
return *lhs < *rhs; machen.
MfG Jester
btw.: f2.operator< kann eigentlich auch nicht gehen, f2 ist schließlich ein pointer.
-
Jaja, das mit dem punkt statt dem Pfeil war auch nur ein Versehen. Ich komme aus der Java-Programmierung, da ist das alles noch etwas gewöhnungsbedürftig
Aaalso, habe jetzt folgendes gemacht:
friend operator <(const Fahrzeug& f1, const Fahrzeug& f2);
als public in der Fahrzeug.h und in der Fahrzeug.cpp steht dann folgendes:
bool operator <(const Fahrzeug& f1, const Fahrzeug& f2) { cout<<"f1: "<<f1.p_dGesamtstrecke<<" f2: "<<f2.p_dGesamtstrecke<<endl; if (f1.p_dGesamtstrecke < f2.p_dGesamtstrecke) return true; else return false; }
Selbes Problem wie vorher.... es wird gar nicht erst drauf zugegriffen. Jaja, ich weiß, Frauen und Programmierung... :p
-
Hast du auch so verglichen:
if (*f1 < *f2)
?
-
Dann bekomm ich beim Compilieren folgende Fehlermeldung:
"error LNK2001: unresolved external symbol "int __cdecl operator<(class Fahrzeug const &,class Fahrzeug const &)" (??M@YAHABVFahrzeug@@0@Z)
Debug/Aufgabenblock_1.exe : fatal error LNK1120: 1 unresolved externals"
-
Welchen Compiler etc. verwendest du denn? Bei mir (Compiliert und ausgeführt mit g++.exe, bcc32) funktioniert alles wie gewünscht.
Caipi
-
Für das was du vorhast must du beide Varianten implementieren.
bool operator<( const Fahrzeug& f1, const Fahrzeug& f2 ) { cout<<"f1: "<<f1.p_dGesamtstrecke<<" f2: "<<f2.p_dGesamtstrecke<<endl; //if (f1.p_dGesamtstrecke < f2.p_dGesamtstrecke) return true; //else return false; // edit: return f1.p_dGesamtstrecke < f2.p_dGesamtstrecke; } bool operator<( const Fahrzeug * lhs, const Fahrzeug * rhs ) { return *lhs < *rhs; }
btw, Ungarische Notation ist wirklich übel, das würde ich mir gar nicht erst ang ewöhnen.
-
Öhm, das mit dem Pointervergleich würd ich gleich mal wieder vergessen, das ist nämlich schon eingebaut und kann nicht überladen werden. Mindestens ein Parameter muss von einem benutzerdefinierten Datentyp sein.
-
Hallo! Erstmal danke für eure Antworten. Ok, wenn ich das nicht machen kann: Wie mache ich es denn dann?
Ich bin ja wie gesagt C++ Neuling und hab noch nicht so richtig Ahnung:
Wenn ich ein Objekt von einer Klasse erzeugen will, wie hierbei das Fahrzeug, da gibt es doch nur die Möglichkeit "Fahrzeug* f = new Fahrzeug()" (dh. mit Pointer) oder nicht? Und wenn ich mir dann mein "<" definieren will, mit dem man die Variablen p_dGesamtstrecke von zwei Fahrzeugen vergleichen kann (indem man die Fahrzeuge vergleicht), wie mache ich das denn dann? Weil du, Bashar, ja sagst, das mit den Pointern geht nicht.
Ich hoffe, ihr könnt mir da helfen!! Ich muss dieses Programm für ein Praktikum erstellen und zwar leider relativ bald... Und da hänge ich schon seit einiger Zeit.
(@finix: ich teste das mal, danke)
-
Achja, und nochwas @finix: ungarische Notation ist leider Pflicht im Praktikum
-
Stimmt, geht nicht mit den Pointern...
Helft mir!!!!!!!!!!!!!!!!
-
Bashar schrieb:
Öhm, das mit dem Pointervergleich würd ich gleich mal wieder vergessen, das ist nämlich schon eingebaut und kann nicht überladen werden.
Oops. Planlos übernommen. Hatte auch eher was anderes im Kopf...
-
@Caipi: Ich benutze Visual C++ 6! Wird ne Win Console Anwendung!
-
"Wenn ich ein Objekt von einer Klasse erzeugen will, wie hierbei das Fahrzeug, da gibt es doch nur die Möglichkeit "Fahrzeug* f = new Fahrzeug()" (dh. mit Pointer) oder nicht"
"Fahrzeug f;"
geht auchund bei pointern kannste immernoch "*f1 < *f2" schreiben ..