Я создал класс Someting , который выдает исключение SomethingException (SomethingException наследуется от std :: exception), когда не удается создать экземпляр. проблема в том, что я не могу поймать SomethingException как таковой (мне пришлось сделать грязный трюк, чтобы поймать его).
В программе есть место, где она выполняется:
Это не работает , исключение не перехватывается и происходит сбой программы.
try{
Something* s = new Something();
}
catch (SomethingException* e){
std::cerr<<e.what();
}
В отличие от этого работает (исключение перехватывается и отображается правильное сообщение), но у меня действительно есть ощущение, что я не должен этого делать
try{
Something* s = new Something();
}
catch (std::exception* e){
SomethingException* e2 = (SomethingException*) e;
std::cerr<<e.what();
}
Поскольку указатель приведен в порядок, я могу выполнить эту работу только тогда и только тогда, когда выдается исключение одного типа. В тот момент, когда мне нужно ловить различные типы, это не сработает.
Есть ли способ отловить пользовательское исключение более правильным способом?
Edit:
Исключение выдается следующим образом
//...
throw new SomethingException ("Errormessage"); //Custom exception constructor
//...
Объявление Something :: Something () равно
Something::Something() throw(...)
Использование декларации
Something::Something() throw(SomethingException)
//or
Something::Something() throw(SomethingException*)
Выдает много предупреждений (Предупреждение C4290)