Wenn Sie std::runtime_error
werfen und nicht behandeln, druckt das Terminal automatisch das Ergebnis what()
, was das Debugging erheblich vereinfacht. Beispiel:Wie kann ich what() aufrufen, nachdem eine nicht behandelte, benutzerdefinierte Ausnahme geworfen wurde?
#include <iostream>
int main()
{
throw std::runtime_error("This is an error message.\n");
}
Console Ausgabe:
terminate called after throwing an instance of 'std::runtime_error'
what(): This is an error message.
Benutzerdefinierte Ausnahmeklassen von dieser Klasse abgeleitet zeigen das gleiche Verhalten, Ausnahmeklassen von Grund auf neu gemacht tun das nicht standardmäßig aktiviert.
Aber die Ausnahmeklasse, die ich erstellen möchte, darf nicht von std::runtime_error
abgeleitet werden. Und zum Debuggen sollte what()
noch gedruckt werden, nachdem das Programm abstürzt - aber ich kann nicht herausfinden, wie das geht, egal was! Kann mir bitte jemand helfen?
Im Moment sieht es wie folgt aus:
#include <iostream>
struct Custom_Exception
{
std::string Msg;
Custom_Exception(std::string Error_Msg) noexcept
{
Msg=Error_Msg;
}
std::string what() noexcept
{
return Msg;
}
};
int main()
{
throw Custom_Exception("This is an error message.\n");
}
Console Ausgabe:
terminate called after throwing an instance of 'Custom_Exception'
Kein what():
in der Fehlermeldung ein std::cout<<Msg;
in die destructor ... Putting entweder nicht hilft .
Bitte helfen Sie mir mit Ihren Vorschlägen! Vielen Dank.
"Aber die Ausnahmeklasse, die ich erstellen möchte, darf nicht von std :: runtime_error abgeleitet sein." - Warum nicht? –
Fangen Sie Ihre Ausnahmen in main und tun Sie, was Sie mit ihnen wollen. Ich würde mich nicht auf die Laufzeit verlassen, um das für Sie zu tun. –
@NeilButterworth Es zwingt mich, bestimmte Datentypen zu verwenden oder jedes Mal zu konvertieren, es hindert mich daran, eine generische Ausnahmeklasse zu erstellen, die ich für meine eigenen Projekte verwenden möchte, ich möchte wissen, wie diese Funktion hinzugefügt werden kann Neugierde. Ich mag es einfach nicht so. Sonst könnte ich einfach std :: runtime_error selbst verwenden ... Aber ich möchte von der eigenen Exception-Klasse, weil es gewisse Dinge std :: runtime_error nicht kann. – Thynome