-1

我的 main 函数中有一条 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 输出到控制台?

4

3 回答 3

2

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

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

于 2013-11-14T18:32:11.897 回答
1

你要么打算扔要么std::stringconst 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;
}
于 2013-11-14T18:19:38.413 回答
1

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

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

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

于 2013-11-14T18:19:47.930 回答