嘿,我试图继承异常类并创建一个名为NonExistingException的新类:我在我的h文件中编写了以下代码:
class NonExistingException : public exception
{
public:
virtual const char* what() const throw() {return "Exception: could not find
Item";}
};
Run Code Online (Sandbox Code Playgroud)
在我发送一些函数之前我的代码正在编写
try{
func(); // func is a function inside another class
}
catch(NonExistingException& e)
{
cout<<e.what()<<endl;
}
catch (exception& e)
{
cout<<e.what()<<endl;
}
Run Code Online (Sandbox Code Playgroud)
在func里面,我抛出一个异常,但没有任何东西可以抓住它.在此先感谢您的帮助.
我会这样做:
// 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.
}
}
Run Code Online (Sandbox Code Playgroud)