class NonExistingException : public exception
{
public:
virtual const char* what() const throw() {return "Exception: could not find
Item";}
};
在我的代码中之前我正在向我正在编写的函数发送内容
try{
func(); // func is a function inside another class
}
catch(NonExistingException& e)
{
cout<<e.what()<<endl;
}
catch (exception& e)
{
cout<<e.what()<<endl;
}
在func中我抛出异常但没有任何东西捕获它。 提前感谢您的帮助。
答案 0 :(得分:5)
我会这样做:
// Derive from std::runtime_error rather than std::exception
// runtime_error's constructor can take a string as parameter
// the standard's compliant version of std::exception can not
// (though some compiler provide a non standard constructor).
//
class NonExistingVehicleException : public std::runtime_error
{
public:
NonExistingVehicleException()
:std::runtime_error("Exception: could not find Item") {}
};
int main()
{
try
{
throw NonExistingVehicleException();
}
// Prefer to catch by const reference.
catch(NonExistingVehicleException const& e)
{
std::cout << "NonExistingVehicleException: " << e.what() << std::endl;
}
// Try and catch all exceptions
catch(std::exception const& e)
{
std::cout << "std::exception: " << e.what() << std::endl;
}
// If you miss any then ... will catch anything left over.
catch(...)
{
std::cout << "Unknown exception: " << std::endl;
// Re-Throw this one.
// It was not handled so you want to make sure it is handled correctly by
// the OS. So just allow the exception to keep propagating.
throw;
// Note: I would probably re-throw any exceptions from main
// That I did not explicitly handle and correct.
}
}