Проблема механизма исключения в C ++ - PullRequest
1 голос
/ 25 декабря 2011

Я вызываю функцию и выкидываю исключение в этой функции. Но я не хочу поймать это в той же функции, но хочу поймать это там, где была вызвана эта функция, как здесь мой пример кода.

void foo()throw(...){
  std::cout << "FOO" <<std::endl;
  throw "Found"; 
}
void main(){
  try{
      foo();
  }
  catch(...){
   std::cout << "exception catched" <<std::endl;
  }
}

Но происходит сбой в тот момент, когда я генерирую исключение в функции foo, но я хочу перехватить его в основной функции.

Как бы я это сделал?

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011
throw; 

throw без операнда сбрасывает исключение, которое в данный момент обрабатывается.Это означает, что он может использоваться только в блоке catch.Поскольку при выполнении throw; вы не находитесь в блоке catch, выполнение программы прекращается.

Вам необходимо выдать что-то , как ошибка времени выполнения: throw std::runtime_error("oops");.


Обратите также внимание, что не следует использовать спецификации исключений (например, throw(...) в void foo() throw(...)).Объяснение причин см. «Прагматический взгляд на спецификации исключений».

0 голосов
/ 25 декабря 2011

Получил ответ на свой вопрос http://msdn.microsoft.com/en-US/library/wfa0edys%28v=VS.80%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...