我有以下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语句中。
答案 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那样捕获值,以避免对象切片和冗余副本出现任何问题。