c++ - 无法从 C++ 中的函数捕获异常

标签 c++ exception exception-handling

如标题所说,我无法捕获函数抛出的异常。它只是说“在抛出一个 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/

相关文章:

python - 退出失败的脚本运行(python)

c++ - 为什么标准不允许通过引用捕获不完整的异常类型?

c++ - 在 getline 上检查 eof() 即 while(!getline().eof()) 和简单检查 while(getline()) 有什么区别

c++ - 为什么升级到Centos 5.5后MAP_GROWSDOWN会出现SIGBUS错误?

c# - 为什么处理 Action 的方法中的 catch 会截断堆栈跟踪?

.net - 如何阻止机器人发布并导致异常

c# - 反序列化列表错误

c# - 使用 HttpClient.GetAsync() 时如何确定 404 响应状态

c++ - Visual C++ 添加 WSDL 文件

c++ - 即使我正在移动,编译器也会尝试使用复制构造函数