2014-01-24 40 views
0

我有以下的try/catch:C++的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语句中。

+8

您正在捕获一个'int'。你知道这个对吗? – Rapptz

+0

要捕捉所有内容,请使用'catch(...)',但不要这样做。 – doug65536

+2

你需要赶上std :: out_of_range而不是int – Pedrom

回答

7

你需要赶上std::out_of_range而不是int

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

你需要抓住的std :: out_of_range的异常,例如:

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

而且使用注意抓参考(&的用法),而不是象对int那样通过值来捕获,以避免对象分片和冗余副本出现任何问题。