我的主要功能
中有一个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输出到控制台?
答案 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()然后在析构函数中释放它以获得内存安全异常。