Задача Try-Catch в C ++ - PullRequest
       11

Задача Try-Catch в C ++

1 голос
/ 26 сентября 2011

Я пытаюсь реализовать очередь в C ++. Во время этого у меня возникла эта проблема.

void Queue::view() 
{
 int i;
 try
 {
  if(Qstatus==EMPTY)
  {
    UnderFlowException ex = UnderFlowException("\nQUEUE IS EMPTY");
    throw ex;
  }
 }

 i=front;
 cout<<"Queue contains...\n";

 while(i <= rear)
 {
  cout<<queue[i]<<" ";
  i++;
 }
}

Это дает ошибку как:

ошибка: ожидаемый «улов» до «i»

Я думаю, что эта проблема возникает из-за того, что я не написал блок catch под блоком try. Но если вы хотите написать блок catch в main (), (как в этом случае), как я могу это сделать?

Раньше я мог это сделать? Если нет, то почему?

Ответы [ 5 ]

7 голосов
/ 26 сентября 2011
Блок

catch должен следовать за блоком try.Если вы хотите, чтобы catch был в main - это то же самое, что и try.Вы можете throw везде, не обязательно находиться внутри блока try внутри одной и той же функции.

Это должно быть примерно так:

void Queue::view() 
{
 int i;
 if(Qstatus==EMPTY)
 {
    UnderFlowException ex = UnderFlowException("\nQUEUE IS EMPTY");
    throw ex;
 }

 i=front;
 cout<<"Queue contains...\n";

 while(i <= rear)
  cout<<queue[i]<<" ";
}
/// ...
int main()
{
    Queue q;
    try{
       q.view();
    }
    catch(UnderFlowException ex)
    {
        /// handle
    }
    catch (...)
    {
     /// unexpected exceptions
    }
    // follow the success/handled errors
}
3 голосов
/ 26 сентября 2011

Вам просто нужно удалить блок try. Блок try всегда идет с catch.

void Queue::view() 
{
    int i;
    if(Qstatus==EMPTY)
    {
        ex = UnderFlowException("\nQUEUE IS EMPTY");
        throw ex;
    }

    i=front;
    cout<<"Queue contains...\n";

    while(i <= rear)
        cout<<queue[i]<<" ";
}

Затем вы можете включить try/catch конструкцию в main.

int main()
{
    Queue queue;
    try
    {
        queue.View()
    }
    catch(UnderFlowException ex)
    {
        //handle ex
    }
    return 0;
}
1 голос
/ 26 сентября 2011

Все блоки try требуют как минимум один связанный блок catch. Вы должны удалить блок try, если у вас нет намерений обрабатывать какие-либо исключения здесь. Исключения могут (и обычно должны быть!) Выбрасываться за пределы блока try.

0 голосов
/ 26 сентября 2011
try{
}
catch(Exception ex){
}

Ловить надо сразу после попытки. Это правила.

0 голосов
/ 26 сентября 2011

Сделайте так, чтобы ваш код перехватывал и выбрасывал исключение, например так:

try
{
 if(Qstatus==EMPTY)
 {
   UnderFlowException ex = UnderFlowException("\nQUEUE IS EMPTY");
   throw ex;
 }
} catch( ... ) {
   throw; // rethrow whatever exception we just catched
}

Хотя вам даже не нужен блок try.Похоже, что throw ex; сработает, поскольку вы не собираетесь его ловить, а просто бросаете.

...