C ++ try / catch没有捕获异常

时间:2014-01-24 20:15:49

标签: c++ visual-studio

我有以下try / catch:

try
{
    Player newPlayer = Database::newPlayer(atoi(arguments.at(1).c_str()), arguments.at(2));
}
catch (int e)
{
    cout << "Wrong parameters used.\n";
}

我的目标是能够添加一个播放器,如果由于某种原因,参数不匹配,例如为arguments.at(1)或不足的参数设置非整数,但在Visual Studio中如果我执行此操作然后程序崩溃,Visual Studio说“未处理的异常,内存位置的std :: out_of_range”。我希望我的程序在发生这种情况时不会崩溃,而只是说“使用了错误的参数”,因为它当前在catch语句中。

3 个答案:

答案 0 :(得分:7)

您需要抓住std::out_of_range而不是int

答案 1 :(得分:4)

你需要捕获std :: out_of_range而不是int

try
{
    Player newPlayer = Database::newPlayer(atoi(arguments.at(1).c_str()), arguments.at(2));
}
catch (std::out_of_range& e)
{
    cout << "Wrong parameters used.\n";
}

答案 2 :(得分:2)

您需要捕获std :: out_of_range异常,例如:

try
{
   //your throwing code
}
catch (std::out_of_range &e)
{
    cout << "Wrong parameters used.\n";
}

还要注意使用引用(&amp; usage)而不是像使用int那样捕获值,以避免对象切片和冗余副本出现任何问题。