hey , i am trying to inherit the exception class and make a new class called NonExistingException: i wrote the following code in my h file:
class NonExistingException : public exception
{
public:
virtual const char* what() const throw() {return "Exception: could not find
Item";}
};
in my code before i am sending something to a function i am writing
try{
func(); // func is a function inside another class
}
catch(NonExistingException& e)
{
cout<<e.what()<<endl;
}
catch (exce开发者_如何学编程ption& e)
{
cout<<e.what()<<endl;
}
inside func i am throwing an exception but nothing catches it. thanks in advance for your help.
I would do this:
// 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.
}
}
精彩评论