• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[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:

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
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