捕获输出的字符串

时间:2013-11-14 18:17:24

标签: c++ string try-catch

我的主要功能

中有一个try catch语句
try
{
    app.init();
}
catch(std::string errorMessage)
{
    std::cout << errorMessage;
    return 1;
}

但当我throw "SOME_ERROR";控制台输出只是

terminate called after throwing an instance of 'char const*'
Aborted (core dumped)

如何将errorMessage输出到控制台?

3 个答案:

答案 0 :(得分:2)

请不要抛出任何不是从std :: exception派生的东西。

豁免可能是旨在终止程序的例外(尽管提供内部状态)

答案 1 :(得分:1)

您打算抛出std::string或抓住const char*

throw std::string("error")

catch(const char* message)

然而,正如所指出的,最好是从std::exception派生出来:

#include <iostream>
// must include these
#include <exception> 
#include <stdexcept>

struct CustomException : std::exception {
  const char* what() const noexcept {return "Something happened!\n";}
};

int main () {
  try {
      // throw CustomException();
      // or use one already provided

      throw std::runtime_error("You can't do that, buddy.");
  } catch (std::exception& ex) {
      std::cout << ex.what();
  }
  return 0;
}

答案 2 :(得分:1)

你需要从std :: exception派生一些东西。 <--if you want memory safety

它有一个方法:virtual const char* ::std::exception::what() const noexcept;

构建你想要在构造函数中看到的char *,存储它,返回它for what()然后在析构函数中释放它以获得内存安全异常。