首页 > 解决方案 > C++ 捕获错误“抛出 'std::out_of_range' 的实例”

问题描述

这将是我在这里的第一个问题。我遇到了一个我想在我正在处理的程序中解决的问题(执行一些实习生/开发人员跟踪任务)。

我有一个 std::map 数据结构。每次我从 cmd 行传递一个未映射的值时,我都会得到:在抛出 'std::out_of_range' 的实例后调用终止 what(): map::at Aborted (core dumped)

没关系,这就是它应该的方式。但是,我想要实现的是验证用户输入,如果地图中不存在该值,则例如在变量中捕获上述事件,然后将其打印出来。

我尝试的每个条件语句都没有按我的意愿工作,因为它会立即抛出“终止调用...”广告,从而关闭整个程序。

标签: c++

解决方案


你应该把你的std::map::at(key)电话放在try/catch块内,如

std::map<std::string, int> my_map = {{"one",1}, {"two":2}};

try
 { 
  auto val = my_map.at("three");
  std::cout << "my value at 'three' is " << val << "\n"; 
 } 
catch(std::out_of_range const & e)
 { 
  std::cerr << "oops 'three' is not in your map\n";
 }

推荐阅读