我确信这很简单,但是没有找到任何其他帖子清楚地指明这一点,虽然我确定必须有一个埋在某处。
在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;
}
答案 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。