Vektor-Problem
-
Ich habe ein kleines Problem mit einer Vektor-Funktion in einem Programm. Einigen kommt das bestimmt bekannt vor, denn ich gerade das Buch "C++ mit dem Borland C++Builder" durch.
Das Problem ist daß der Compiler bei jeder empty()-Funktion in der Laufzeit das Programm abbricht, aber compilieren tut er es problemlos. Ich könnte es jetzt natürlich anders programmieren, aber da ich denn Fehler nicht kenne kann ich daraus auch nix lernen.vector<CKontobewegung> Konto; vector<CKontobewegung>::iterator i; ... ... ... ... void EnableButtons(void) { Form1->Button1->Enabled=(!Konto.empty()); Form1->Button2->Enabled=(!Konto.empty()) && (i>Konto.begin()); Form1->Button3->Enabled=(!Konto.empty()) && (i<Konto.end()-1); Form1->Button4->Enabled=(!Konto.empty()); Form1->Button6->Enabled=(!Konto.empty()); }&;&;&;man:
-
Hallo
schau mal mit dem Debugger, bei welcher Zeile genau der Absturz kommt.
ich tippe mal auf i<Konto.end()-1bis bald
akari
-
Nach dem Absturtz ist die Zeile Form1->Button1->Enabled=(!Konto.empty()); markiert. Ich denke da muß dann auch der Fehler sein.
-
Hallo
dann liegt es eher an Form1->Button1. Bist du sicher das dahinter gültige Instanzen stecken?
bis bald
akari
-
Warum sollte das ungültig sein? Konto wird direkt am Anfang global definiert. Also muß es doch gültig sein.
-
Test:
bool b = Konto.empty(); Form1->Button1->Enabled=(!b);In welcher Zeile tritt das Problem auf, und wie lautet die Fehlermeldung?
-
Also, ich hab den Test mal aus probiert.
[cs]
bool b = Konto.empty(); //funktioniert einwandfrei
Form1->Button1->Enabled=(!b); // !b kann der BCB nicht zuweisen
[/cs]Normalerweise sollte ein Bool doch problemlos der Eigenschaft zugewiesen werden können.
-
Hallo
natürlich sollte das zuzuweisen sein. Deshalb meine letzte Frage : sind in Form1 (insbesondere hier, wenn du auf ein anderes Fenster zugreifst) und in Form1->Button1 wirklich gültige Instanzen? Mit dem Debugger mal nachprüfen.
bis bald
akari
-
Eigentlich müßte es eine gültige Instanz sein, aber so lange arbeite ich noch nicht mit dem BCB. Wie kann ich das mit dem Debugger nachprüfen?
-
Hallo
Grundlagen gibts hier.
Wie im Abschnitt Variablen überwachen gibts du als Variablen zuerst Form1 ein. Ist das bereits NULL, ist dort der Fehler.
Dann noch Form1->Caption, wo dann der vollständige Titeltext des Fensters stehen sollte, dann weißt du das Form1 in Ordnung ist.
Danach dasselbe noch mit Form1->Button1.bis bald
akari
-
Lykantrop schrieb:
Also, ich hab den Test mal aus probiert.
[cs]
bool b = Konto.empty(); //funktioniert einwandfreiWie man sieht hat das Problem also nichts mit vector zu tun, d.h. die Überschrift des Threads ist komplett irreführend.
Solche Tests sind unbedingt durchzuführen, bevor man sich mit Fragen an andere wendet.
-
Ich hab den Test jetzt nochmal mit überwachten Ausdrücken gemacht. Der Debugger sagt mir bei Konto.empty() immer: E2382 Seiteneffekte nicht zulässig.
Bloß komischer weise geht nicht mal "Form1->Button1->Enabled=false;". Ich hab damit nix großartiges gemacht. Das kann doch nicht daran liegen daß Button1 in einem Panel liegt?Irgendwie ist das alles sehr merkwürdig
-
Hallo
du kannst im Debugger die Seiteneffekte für anzuzeigende Werte zulassen, indem du im Fenster "Darstellung überwachter Ausdrücke" die Optionen "Seiteneffekte zulassen" aktivierst.
/Edit : nein mit dem Panel hat das nichts zu tun... Keine Ahnung.
bis bald
akari