我有一个使用try-catch
的功能。所以我想使用和另一个类打印出不同类型的消息。我该怎么办?
我使用命名空间std
。我不熟悉使用名称空间std
。请指导我,谢谢。
SparseException::SparseException ()
{ }
SparseException::SparseException (char *message)
{ }
void SparseException::printMessage () const
{
// ...
}
try
{
//did some stuffs here.
}
catch (exception e)
{
char *message = "Sparse Exception caught: Element not found, delete fail";
SparseException s (message);
s.printMessage();
}
答案 0 :(得分:3)
从std::exception
派生您的例外类并覆盖what()
。删除您的函数printMessage
并实现(覆盖):
virtual const char* what() const throw();
在C ++ 11中,这个函数有这个签名:
virtual const char* what() const noexcept;
然后你的catch子句和异常原因的打印可能如下所示:
catch (const std::exception& e)
{
std::cerr << "exception caught: " << e.what() << '\n';
}
答案 1 :(得分:0)
或者如果你只想抛出异常,你可以这样做:
SparseException::SparseException ()
{ }
SparseException::SparseException (char *message)
{ }
void SparseException::printMessage () const
{
// ...
}
try
{
//did some stuffs here.
//Possibly
//throw SparseException();
//or
//throw SparseException("Some string");
//Make sure you can throw only objects of SparseException type
}
catch (SparseException e)
{
e.printMessage();
}
如果执行带有throw的行,则try块的结果将被终止,catch块将被执行,其中e是你抛出的对象。