在C ++中抛出错误时附加一个字符串

时间:2014-03-04 06:36:26

标签: c++ string exception try-catch multi-catch

我确信这很简单,但是没有找到任何其他帖子清楚地指明这一点,虽然我确定必须有一个埋在某处。

在C ++中,当以下面的方式使用try catch块时,如何将字符串变量附加到错误消息中?

尝试这样做时,我得到一个未处理的异常。是否与传回的类型有关?似乎返回字符串而不是char *。如果这是正确的,会导致问题吗?我该如何调整呢?我尝试添加一个额外的catch(const字符串my_msg),但这也不起作用。

string msg = "message";
try{
    if (...)
        throw "My error " + msg;
    }
catch (const char* my_msg){
    cerr << my_msg << endl;
}

1 个答案:

答案 0 :(得分:2)

"My error " + msg是一个operation that concatenates一个const char*字符串和一个std::string。此操作会生成std::string类型的临时变量。因此,必须使用类型为std::string的catch子句捕获抛出的变量。

catch (const std::string& my_msg){
    cerr << my_msg << endl;
}

但是,更好的做法是让您的例外来自std::exception。您不需要创建自己的异常类,因为有std::runtime_error及其派生,它提供了对常见运行时异常的有用分类。

在许多情况下,您需要为您的例外设置不同的类型,通常可能是项目或域特定的。在C ++ 11中,制作自己的异常类型就像这个

一样简单
struct my_exception : std::runtime_exception {
    using std::runtime_exception::runtime_exception;   // Inherit runtime_exception's constructors
};

这使用C ++ 11的inheriting constructors