Sadece bir istisna hiyerarşisi oluşturdum ve yakalama blokumun türetilmiş istisnanın mesajını göstermesini istiyorum. bunun gibi 5 istisnalar var: Hepsi de TGAException türetilenC++ İçinde İstisnalar Hariç Tut
class ImagetypeException : public TGAException {
public:
const char* what() const throw();
};
const char* ImagetypeException::what() const throw() {
return "Der Bildtyp ist nicht \"RGB unkomprimiert\".";
}
, o std :: istisna türetilmiştir.
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!";
}
Yani açıkçası benim kodunda bir noktada bu atmak istiyorum ve ihtiyacım yakalama blokların miktarını en aza indirmek için, iyi bir fikir olabileceğini düşündüm. Ben böyle yaparsanız
catch (TGAException e) {
cout << e.what() << endl;
}
, basılacak mesajı, TGAException dan biridir, ama daha özel türetilmiş mesajlar göstermek istiyorum. Peki, bunu istediğim şekilde çalışmak için bunu yapmak için ne yapmam gerekiyor?
"catch (TGAException & e)' de olduğu gibi referansla yakalayın. Değerle yakaladığınızda, istisna nesnesini değiştirmeyi planladığınızdan, yapılamamıza göre [slice it] (https://en.wikipedia.org/wiki/Object_slicing) –
daha iyisi olursunuz. @IgorTandetnik bunu bir cevap vermelisiniz (ya da ben de rep çalamaya çalışmıyorum) –
Yapıyorsunuz * Nesne Dilimleme *, referansla yakalanana kadar. –