如何通过参数抛出错误消息

How to throw an error message with an argument?

本文关键字:错误 消息 出错 何通过 参数      更新时间:2023-10-16

我真的很难抛出一条包含函数参数的错误消息。我知道我能做到:

throw std::out_of_range("Empty tree");

我正在努力解决的是我应该抛出的另一个错误,那就是:

"Cannot find ceil for key <key>" 

正如你所看到的,我应该包括我找不到ceil的钥匙。在抛出异常的函数中,我将密钥作为变量,但我不知道如何将其包含在e.what((最终打印的内容中。

EDIT:这是一个作为类成员的模板函数,所以键现在只是类型T。因此,我认为将其格式化为c字符串不起作用。

标准异常只将字符串作为参数:

例如out_of_range,请参阅apache.org文档

namespace std {
class out_of_range : public logic_error {
public:
explicit out_of_range(const string&  what_arg);
};
}

您可以使用任何方法预先构建字符串,然后将其作为参数传递给异常。

示例

#include <string>
#include <sstream>
#include <stdexcept>
std::ostringstream oss;
oss << "Cannot find ceil for key " << key;
std::string errorString = oss.str();
throw std::out_of_range(errorString);

有关创建字符串的其他方法,请参阅C++创建文本和变量字符串