0

我敢肯定这很简单,但是找不到任何其他明确说明这一点的帖子,尽管我敢肯定一定有一个埋在某个地方。

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

尝试执行此操作时出现未处理的异常。这与传回的类型有关吗?似乎是返回一个字符串而不是一个 char*。如果这是正确的,那会导致问题吗?我将如何调整?我尝试添加一个额外的捕获(const string my_msg),但这也不起作用。

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

1 回答 1

2

"My error " + msg是一种连接字符串const char*std::string. 此操作产生一个类型为 的临时变量std::string。因此,抛出的变量必须使用类型的 catch 子句来捕获std::string

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 的继承构造函数

于 2014-03-04T06:38:36.980 回答