Frage zu Headerdateien
-
Ich hab mir jetzt nochmals meinen Code genau angesehen und dabei festgestellt, dass der Fehler immer dann kommt, wenn das Programm die weitere Person in die set speichern will. Dabei ist mir aufgefallen, dass er versucht die weitere Person auf die gleiche Stelle zu speichern, wo schon eine Person ist.
Ich hab mir nun ein kleines Programm geschrieben indem ich feststellen konnte, wie diese insert() Methode arbeitet. Dabei hab ich entdeckt, dass man bei insert() den iterator nicht weiterzählen lassen muss, sonder das macht insert() selber.
Ich weiß leider jetzt aber noch immer nicht was da faul sein könnte.
-
vip@r schrieb:
Ich weiß leider jetzt aber noch immer nicht was da faul sein könnte.
Tja. Hast du mal an die revolutionäre Idee gedacht. den Code zeigen, der den Fehler verursacht? Das was du oben gezeigt hast, ist nur gefährlich, nicht falsch. Und da wird auch nix weitergezählt oder so, daher ist wohl anzunehmen, dass du mit ganz anderem Code arbeitest.
-
Auch wenn das jetzt etwas spät ist, aber hier ist der Code:
Diese Methode,...
void verwaltung::addMitarbeiter(person p) { set<person>::iterator iter = mitarbeiter.end(); mitarbeiter.insert(p); }..., wird von diesem Aufruf aus der main aufgerufen:
neueVerw.addMitarbeiter(p1); neueVerw.addMitarbeiter(p2); neueVerw.addMitarbeiter(p3);p1 funktioniert tadellos; erst bei p2 hakts dann und das Programm bricht mir mit einem Fenster mit diesem Inhalt ab: http://s14.directupload.net/file/d/2882/u79psxp8_jpg.htm
Edit: Eigentlich brauch ich doch diesen Iterator gar nicht, das müsste doch auch ohne gehen...; das Problem besteht aber dann dennoch weiterhin!
-
Dein operator< ist fehlerhaft, er berechnet nicht wirklich <. Vermutung: es kann gleichzeitg p1<p2 und p2<p1 wahr sein.
-
Wenn ich p2 in der Verwaltung ablegen will, dann liefert strcmp() eine 1 zurück. Laut der C++Referenz heißt das dann Folgendes: A value greater than zero indicates that the first character that does not match has a greater value in str1 than in str2.
Wie wirke ich dem nun entgegen? Besser gefragt: Was ist daran nun falsch?
-
vip@r schrieb:
Was ist daran nun falsch?
Warum sollte etwas daran falsch sein?
-
Nein, natürlich nicht an meiner Erklärung sondern an meinem Code...
-
Operator < muss bool zurückgeben. Dabei bedeutet true dass das erste Argument kleiner als das zweite ist, false bedeutet dass das erste Argument größer oder gleich dem Zweiten ist. strcmp gibt aber int zurück (-1: str1 < str2, 0:str1=str2, 1:str1>str2)
Das heißt, dein operator< muss so aussehen:bool operator<(const person& p1, const person& p2) { if(strcmp(p1.nachName,p2.nachName) < 0) return true; return false; }
-
pyhax schrieb:
Das heißt, dein operator< muss so aussehen:
bool operator<(const person& p1, const person& p2) { if(strcmp(p1.nachName,p2.nachName) < 0) return true; return false; }Nein, er muss so aussehen:
bool operator<(const person& p1, const person& p2) { return strcmp(p1.nachName, p2.nachName) < 0; }
-
vip@r schrieb:
Da es "nur" zu Übungszwecken ist, würde ich mich freuen, wenn du über diese, ich nenn es jetzt mal Schwachstellen, drüber wegschaust.
Ganz falscher Ansatz. Grade wenn du noch am Üben bist, sollten die schlechten Details alle angemerkt werden, damit du es richtig übst und dir nicht den gleichen fehleranfälligen Stil angewöhnst, den dein Lehrer offenbar intus hat. Den später wieder loszuwerden ist nämlich nicht gerade einfach.