Wie ist das möglich?!
-
Hallo zusammen
Wie wohl viele hier hab' ich eine Funktion, die nicht so tut wie ich das gerne hätte. Mein Problem dabei: Ich krieg eine Funktionsweise, die ich mir beileibe nicht erklären kann - und entsprechend weis ich auch nicht, wo ich bei der Fehlersuche denn ansetzen sollte. Entsprechend bitte ich nur darum, dass mir jemand erläutern kann, wie Folgendes überhaupt zustande kommen kann, so dass ich mich dann auf Fehlersuche begeben kann. Also los...
Kontext: Ein Programm mit verschiedenen untereinander über Pointer vernetzten Objekten, die alle eine gemeinsame parent class besitzen. Diese parent class besitzt eine virtual methode bool test( Objekt ).
Nun besitzt eines der "Kindobjekte" der parent class eine test-methode mit folgendem pseudo code:bool ChildObject::test( Object* _whateva ) { ... for( i: all connections to other objects ) { Object1*=ObjectOnPosition(i); Object2*=_whateva->ObjectOnPosition(i); if( !Object1->test( Object2 ) ) return false; } return true; }Mein Problem: Das return false funktioniert nicht. Und dies obwohl die if-Bedingung erfüllt ist.
Beispielsweise gibt mir dann...bool ChildObject::test( Object* _whateva ) { ... for( i: all connections to other objects ) { Object1*=ObjectOnPosition(i); Object2*=_whateva->ObjectOnPosition(i); if( !Object1->test( Object2 ) ) { cout<<"Ich war hier!!"<<endl; return false; } } return true; }... den Text auf der Konsole aus, aber ein return false passiert keiner, so dass dann...
bool ChildObject::test( Object* _whateva ) { ... for( i: all connections to other objects ) { Object1*=ObjectOnPosition(i); Object2*=_whateva->ObjectOnPosition(i); if( !Object1->test( Object2 ) ) { cout<<"Ich war hier!!"<<endl; return false; } cout<<"Aber hier war ich auch!!"<<endl; } return true; }... tatsächlich immer beide Texte auf der Konsole ausgibt, als ob der return false übersprungen würde?
Das Programm kompiliert und läuft ohne sichtbare Fehler/Warnungen. (g++/Linux)
Kann sich wer einen Reim auf das Problem machen? Wie ist es möglich, dass der eine Befehl ausgeführt wird, der nächste aber nicht? Läuft da beim Kompilieren/Linken irgendwo was schief, nach was für einem Fehler soll ich suchen?
Vielen Dank und Beste Grüsse
Pete
-
ccpete schrieb:
Kann sich wer einen Reim auf das Problem machen?
Ja. Das ganze Design das du beschreibst riecht nach einem Fehlermagneten.
Wie ist es möglich, dass der eine Befehl ausgeführt wird, der nächste aber nicht? Läuft da beim Kompilieren/Linken irgendwo was schief, nach was für einem Fehler soll ich suchen?
Da läuft nichts schief. Dein Programm ist bloß so verquer, dass du selber nicht mehr durchblickst. Zeig uns mal ein vollständiges minimales Beispiel, dann zeigen wir dir die genaue Fehlerursache. Oder noch besser: Benutze einen Debugger und lerne, wie man solchen Fehlern selbst auf die Spur kommt (ist nicht schwer). Oder mach beides.
-
SeppJ schrieb:
Ja. Das ganze Design das du beschreibst riecht nach einem Fehlermagneten.
Auf was spielst du an? Auf die Pointer?
SeppJ schrieb:
Da läuft nichts schief. Dein Programm ist bloß so verquer, dass du selber nicht mehr durchblickst.
Ich danke für die harten Worte. Tatsächlich hatte ich gerade ein Aha-Erlebnis (wie so häufig in den Momenten wo mans aufgibt verkrampft nach einer Lösung zu suchen...). Ich hab' gerade festgestellt ich such einen Fehler dens gar nicht gibt: Alles funktioniert genauso wies beim Erstellen gedacht war
(da hätte mir ein Debugger wahrlich wenig genützt..). Ich hatte tatsächlich nur beim Testen der Funktion den Überblick verloren (und zwar nur in Bezug auf diese Funktion, wie sie oben steht, nicht auf das ganze Programm). Das Programm an sich halte ich für wohlüberlegt - wobei ich ohne Diagramme und Planung schon längst den Überblick verloren hätte.Gruss