【发布时间】:2014-01-25 04:23:45
【问题描述】:
我有以下尝试/捕获:
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 语句中。
【问题讨论】:
-
您收到了
int。你知道吗? -
要捕获所有内容,请使用
catch (...),但不要这样做。 -
你需要捕获 std::out_of_range 而不是 int
-
捕获
std::out_of_range类型而不是int。 -
我推荐
std::stoi(或者boost::lexical_cast,如果你还没有达到C++11)而不是atoi()。atoi()不会在无效整数上抛出任何东西,只返回一个 0。
标签: c++ visual-studio