У меня есть пользовательский класс исключений ниже:
#include <exception>
#pragma once
class MyException : public std::exception
{
public:
MyException ();
MyException (std::string message="");
virtual const char* what()throw();
private:
std::string m_exceptionMessage;
};
Соответствующий файл .cpp имеет правильные определения.
Вот как вложена моя функция:
f1();
f2();
void main()
{
try
{
f1();
}
catch (std::exception &ex)
{
std::cerr << ex.what() << std::endl;
}
}
void f1()
{
try
{
f2();
}
catch (std::exception &ex)
{
throw std::exception(ex);
}
}
void f2()
{
try
{
InitCalculations();
hr = DoSomething();
if(hr!=S_OK)
throw MyException ("invalid argument")
}
catch (std::exception &ex)
{
throw std::exception(ex);
}
}
Я попытался обобщить проблему. Все функции лежат в разных файлах под разными заголовками. Я получаю правильную передачу сообщения в первый перехват функции f2()
, однако, когда я пытаюсь распространить это сообщение, я теряю его в f1()
и, следовательно, в main()
Как правильно распространить исключение из f2()
в функцию main()
?