Я изучаю С++, и я испытываю, когда пытаюсь создать собственное исключение и бросаю их в Linux.
Я создал небольшой тестовый проект для тестирования моей реализации, а ниже - мой заголовок класса исключения.
class TestClass : public std::runtime_error
{
public:
TestClass(char const* const message) throw();
virtual char const* what() const throw();
};
Исходным файлом для класса исключения является
using namespace std;
TestClass::TestClass(char const* const message) throw()
: std::runtime_error(message)
{
}
char const * TestClass::what() const throw()
{
return exception::what();
}
В моем основном приложении я вызываю функцию, которая выдает мое исключение и ловит его в try/catch следующим образом:
void runAFunctionAndthrow();
/*
*
*/
int main(int argc, char** argv) {
try
{
cout << "About to call function" << endl;
runAFunctionAndthrow();
}
catch (TestClass ex)
{
cout << "Exception Caught: " << ex.what() << endl;
}
return 0;
}
void runAFunctionAndthrow()
{
cout << "going to run now. oh dear I need to throw an exception" << endl;
stringstream logstream;
logstream << "This is my exception error. :(";
throw TestClass(logstream.str().c_str());
}
Когда я запустил, я ожидаю получить следующий вывод:
О вызове функции
Теперь нужно запустить. о, дорогая, мне нужно выбросить исключение
Exception Caught: Это моя ошибка исключения.: (
Вместо этого я получаю
О вызове функции
будет запущен. о, дорогая, мне нужно выбросить исключение
Исключение: Std:: exception
Обратите внимание, что в последней строке указано std:: exception вместо моего фактического сообщения об исключении "Это моя ошибка исключения".
Почему это, он работает нормально в Windows, но в Linux он это делает.
Из того, что я видел на разных постах, то, что я сделал, является правильным, так что мне не хватает.