Właśnie utworzyłem hierarchię wyjątków i chcę, aby mój blok catch pokazywał komunikat wyprowadzonego wyjątku. mam 5 wyjątki takie jak ten:Dziedzicz wyjątki w C++
class ImagetypeException : public TGAException {
public:
const char* what() const throw();
};
const char* ImagetypeException::what() const throw() {
return "Der Bildtyp ist nicht \"RGB unkomprimiert\".";
}
Wszystkie z nich są pochodzące od TGAException, że pochodzi z std :: wyjątku.
class TGAException : public std::exception {
public:
virtual const char* what() const throw();
};
const char* TGAException::what() const throw() {
return "Beim Einlesen oder Verarbeiten der TGA-Datei ist ein unerwarteter Fehler aufgetreten!";
}
Więc oczywiście chcą rzucić te w pewnym momencie mojego kodu i że może to być dobry pomysł, aby zminimalizować ilość połowów bloków muszę.
catch (TGAException e) {
cout << e.what() << endl;
}
Jeśli zrobić to w ten sposób, komunikat, który zostanie wydrukowany, jest jednym z TGAException, ale chcę, aby pokazać bardziej konkretne wiadomości pochodzące. Co więc muszę zrobić, aby to działało tak, jak tego chcę?
Złap według referencji, tak jak w 'catch (TGAException & e)'. Po złapaniu przez wartość, [plaster go] (https://en.wikipedia.org/wiki/Object_slicing) –
jeszcze lepiej, catch przez odniesienie do const, ponieważ nie planujesz zmienić obiektu wyjątku. @IgorTandetnik powinieneś zrobić to odpowiedź (albo ja, ale nie próbuję kraść rep) –
Robisz * Przecinanie obiektów *, dopóki nie złapie przez odniesienie. –