• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

[C++] Try/Catch-Problem

stoebe

Uelzener Rambour
Registriert
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
 
Zuletzt bearbeitet:
Wo liegt der Fehler? Wer weiß Rat?
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;
    }
}
 
  • Like
Reaktionen: stoebe