首页 > 解决方案 > 如何使用参数抛出错误消息?

问题描述

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

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

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

"Cannot find ceil for key <key>" 

如您所见,我应该包含无法找到 ceil 的密钥。我在抛出异常的函数中有键作为变量,但我不知道如何将它包含在最终将由 e.what() 打印的内容中。

编辑:这是作为类成员的模板函数,因此 key 现在只需键入 T 。因此,为什么我认为将其格式化为交流字符串不起作用。

标签: c++error-handlingexception-handlingthrow

解决方案


标准异常只接受一个字符串作为参数:

例如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++ 创建文本和变量字符串


推荐阅读