0

我有一个使用try-catch. 所以我想使用和另一个类来打印出不同类型的消息。我应该怎么办?

我使用命名空间std。我是新手,不熟悉 using namespace 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();
}
4

2 回答 2

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';
}
于 2013-02-15T13:12:47.577 回答
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 是您抛出的对象。

于 2013-03-11T19:52:37.283 回答