• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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