如标题所说,我无法捕获函数抛出的异常。它只是说“在抛出一个 tocccli::InvalidParametersError* 实例后调用终止”
try{
cmd_parameters = parse_cmd(argc, argv);
}
catch (InvalidParametersError e){
// blablabla
}
抛出异常的函数
std::vector<CmdParam> parse_cmd(int argc, char* argv[]){
for (int i = 1; i < argc; ++i)
{
if (argv[i][0] == '-')
{
//blablala
}
else
{
if (result.empty())
{
throw new InvalidParametersError(
"First parameter have to be an option (e.g. starts with a dash)");
}
result.back().arguments.push_back(argv[i]);
}
}
return result;
}
该函数位于名为 tocccli 的命名空间内 我错过了什么吗?
最佳答案
不要在 parse_cmd()
中使用 new
关键字抛出:
std::vector<CmdParam> parse_cmd(int argc, char* argv[]){
for (int i = 1; i < argc; ++i)
{
if (argv[i][0] == '-')
{
//blablala
}
else
{
if (result.empty())
{
throw InvalidParametersError( // <-- No new keyword here
"First parameter have to be an option (e.g. starts with a dash)");
}
result.back().arguments.push_back(argv[i]);
}
}
return result;
}
通过 const 引用捕获:
try{
cmd_parameters = parse_cmd(argc, argv);
}
catch (const InvalidParametersError& e){
// blablabla
}
关于c++ - 无法从 C++ 中的函数捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24888578/