1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[C++] Try/Catch-Problem

Dieses Thema im Forum "OS X-Developer" wurde erstellt von stoebe, 05.05.07.

  1. stoebe

    stoebe Uelzener Rambour

    Dabei seit:
    23.12.05
    Beiträge:
    371
    Hi,

    ich schreibe am Dienstag meine Abschlussprüfung im Fach Anwendungsentwicklung und bin gerade dabei, den ganzen Stoff (Structs, Classes, Pointers) nochmal zu festigen. Ansich kam ich bisher ganz gut durch. Alles läuft so, wie es soll, bis auf meine Try/Catch-Anweisungen. Vielleicht kann mir ja der ein oder andere sagen, wo mein Problem liegt.

    Es sei folgende Klasse gegeben:

    Code:
    class DoubleArray
    {
    void append(int Wert)
    {
    	Zahlen[Size] = Wert;
    	++Size;
    	if (Size==Capacity) throw "\nDoubleArray voll!\n\n";
    }
    };
    Die main-Funktion beinhaltet den Aufruf der Funktion append, welcher in einem Try-Block eingeschlossen ist:

    Code:
    int main()
    {
    try
    {
    	while(Wert>0)
    	{
    		cout << "Wert: ";
    		cin >> Wert;
    		if (Wert!=0) Zahlen.append(Wert);
    	}
    }
    
    Der Catch-Block soll nun diese Ausnahme auffangen:

    Code:
    catch(char *str)
    {
    	cout << str;
    }	
    So, und genau hier liegt das Problem. Mache ich das so, wie ich es hier aufgezeigt habe, wird mein Programm bei der Ausnahme statt mit der Meldung "DoubleArray voll!" lediglich mit
    Code:
    terminate called after throwing an instance of 'char const*'
    Abort trap
    
    beendet.

    Throwe ich jedoch mit einem beliebigen Wert
    Code:
    throw 1;
    und fange alle Ausnahmen auf,
    Code:
    catch(...)
    {
    	...
    }
    wird der Rumpf des Catch-Blocks abgearbeitet.

    Wo liegt der Fehler? Wer weiß Rat?


    Vielen Dank,

    stoebe
     
    #1 stoebe, 05.05.07
    Zuletzt bearbeitet: 06.08.07
  2. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.252
    Du wirfst eine Ausnahme vom Typ "char const*", aber Du versuchst eine Ausnahme vom Typ "char*" zu behandeln. Ein Tip dafür, man nimmt besser einer der Standard Ausnahmen die von std::exception abgeleitet sind, oder leitet seine eigene Ausnahme davon ab.

    z.B.
    Code:
    #include <exception>
    
    class DoubleArray {
    public:
        void append (int const Wert) {
            Zahlen[Size] = Wert;
            ++Size;
    	if (Size==Capacity)
                throw std::range_error("\nDoubleArray voll!\n\n");
        }
    };
    
    Code:
    #include <exception>
    #include <iostream>
    #include <ostream>
    
    int main () {
        try {
            while (0 < Wert) {
    		std::cout << "Wert: ";
    		std::cin >> Wert;
    		if (0 != Wert) Zahlen.append(Wert);
    	}
        }
        catch (std::range_error &error) {
            std::cerr << error.what() << std::endl;
        }
    }
    
     
    stoebe gefällt das.

Diese Seite empfehlen