Probleme mit Exception



  • Hallo,

    der problematische Teil des Programms sieht wie folgt aus(Ausriss):

    try
    		{
    			string cutted(roh,15);
    		}
    		catch (out_of_range)
    		{
    			cout << "Kontrollpunkt erreicht!";
    			return kartei;
    		}
    
    		switch(Aktuell)
    		{
    		case recnum:
    			kartei->cRecnum=cutted;
    

    Ohne den Exception Handler gibt es Probleme, wenn im string "roh" weniger als 15 Zeichen stehen (logisch). Eigentlich soll einfach das Objekt kartei übergeben werden, sobald zum ersten mal weniger als 15 Zeichen in "roh" stehen.
    Nur wird beim Compilieren der String cutted irgendwie vom Compielr ignoriert. Es folgen Fehlermeldungen, die besagen, cutted wäre unbekannt und mehrere daraus resultierende Fehler.
    Schreibe ich hingegen

    string cutted(roh,15);
    
    	switch(Aktuell)
    		{
    		case recnum:
    		kartei->cRecnum=cutted;
    

    ist alles kein Problem. Ich habe es auch mit ner if- Kontrolle versucht, auch dann wird cutted beim Kompilieren irgendwie ignoriert und es gibt die gleichen Fehlermeldungen, von wegen undeclared identifier und so weiter.



  • cutted hat seinen eigenen gültigkeitsbereich, der zwischen der geschweiften klammer nach try und vor der geschweiften klammer vor catch liegt. Das Objekt cutted existiert außerhalb dieses bereichs nicht.
    du musst das irgendwie umgehen (string raus, code rein in try block, was ganz anderes etc.)



  • Bin schon dabei und es funktioniert!



  • Exceptions sollten für Ausnahmen verwendet werden, nicht um Programmlogik auszudrücken. Wenn Du etwas bestimmtes tun willst, wenn eine bestimmte Situation eintritt, zum Beispiel irgendein Objekt zurückgeben sobald ein string weniger als 15 Zeichen hat, dann schreib das auch in den Code rein:

    if(zeicheninbla < 15) return blub;

    Mit Exceptions sollte man solche gewöhnlichen Situationen nicht behandeln. Damit sollten viel mehr Dinge behandelt werden, die wirklich vom normalen Programmverlauf abweichen.

    MfG Jester



  • Ausriss? 😃


Anmelden zum Antworten