2014-01-24 6 views
0

У меня есть следующий TRY/поймать:C++ попробовать/поймать не поймать исключение

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 в ячейке памяти». Я хочу, чтобы моя программа не сработала, когда это произойдет, но просто скажите «Неверные параметры, используемые», поскольку она в настоящее время находится в выводе.

+8

Вы поймаете 'int'. Вы знаете это правильно? – Rapptz

+0

Чтобы поймать все, используйте 'catch (...)', но не делайте этого. – doug65536

+2

Вам нужно поймать std :: out_of_range вместо int – Pedrom

ответ

7

Вам необходимо поймать std::out_of_range не int.

4

Вы должны поймать зЬй :: 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

Вам нужно будет поймать зЬй :: out_of_range исключение, например:

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

Также обратите внимание на улов с помощью reference (использование &) вместо того, чтобы ловить по значению, как вы делали с int, чтобы избежать каких-либо проблем с обрезкой объектов и избыточными копиями.

Смежные вопросы