Что это за ошибка в коде? - PullRequest
0 голосов
/ 27 сентября 2011

при работе в try-catch in наткнулся на эту ошибку.Но я не могу отследить причину этой ошибки, хотя я просматривал Интернет и SO .

Мой код ...

int main()
{
Queue q;
int choice,data;

 while(1)
 {
  choice  = getUserOption();
  switch(choice)
  {
   case 1:
     cout<<"\nEnter an element:";
     cin>>data;
     q.enqueue(data);
     break;
   case 2:
     int element;
     element = q.dequeue();
     cout<<"Element Dequeued:\n"<<element;
     break;
   case 3:
     q.view();
     break;
   case 4:
     exit(EXIT_SUCCESS);
  }
  catch(UnderFlowException e)
  {
   cout<<e.display();
  }
  catch(OverFlowException e)
  {
   cout<<e.display();
  }

 }// end of while(1)

       return 0;
}

Для меня все вприведенный выше код представляется правильным.Но компилятор g ++ выбрасывает ...

muthu@muthu-G31M-ES2L:~/LangFiles/cppfiles/2ndYearLabException$ g++ ExceptionHandlingEdited.cpp
ExceptionHandlingEdited.cpp: In member function ‘void Queue::enqueue(int)’:
ExceptionHandlingEdited.cpp:89:97: warning: deprecated conversion from string constant to ‘char*’
ExceptionHandlingEdited.cpp: In member function ‘int Queue::dequeue()’:
ExceptionHandlingEdited.cpp:113:95: warning: deprecated conversion from string constant to ‘char*’
ExceptionHandlingEdited.cpp: In member function ‘void Queue::view()’:
ExceptionHandlingEdited.cpp:140:66: warning: deprecated conversion from string constant to ‘char*’
ExceptionHandlingEdited.cpp: In function ‘int main()’:
ExceptionHandlingEdited.cpp:185:3: error: expected primary-expression before ‘catch’
ExceptionHandlingEdited.cpp:185:3: error: expected ‘;’ before ‘catch’
ExceptionHandlingEdited.cpp:189:3: error: expected primary-expression before ‘catch’
ExceptionHandlingEdited.cpp:189:3: error: expected ‘;’ before ‘catch’

Ответы [ 3 ]

4 голосов
/ 27 сентября 2011

Вам необходимо заключить ваш код в конструкцию try {...}, иначе catch не будет знать, какой код он должен перехватить.

Оберните вашу while петлю в try:

try {
 while(1)
   {
    .....
   }// end of while(1)
} catch(UnderFlowException e) ...

Reference .

4 голосов
/ 27 сентября 2011

Вы не можете иметь catch без try. Поставьте строку:

try {

до вашего while заявления.

Если вы хотите избавиться от предупреждений о строковых константах, вам, вероятно, придется изменить типы на const char * или явным образом привести / скопировать их. Или вы можете использовать опцию -Wno-write-strings для gcc.

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

Попробуйте это:

int main()
{
Queue q;
int choice,data;

 while(1)
 {
  choice  = getUserOption();
  try 
  {
    switch(choice)
    {
     case 1:
       cout<<"\nEnter an element:";
       cin>>data;
       q.enqueue(data);
       break;
     case 2:
       int element;
       element = q.dequeue();
       cout<<"Element Dequeued:\n"<<element;
       break;
     case 3:
       q.view();
       break;
     case 4:
       exit(EXIT_SUCCESS);
    }
  }
  catch(UnderFlowException e)
  {
   cout<<e.display();
  }
  catch(OverFlowException e)
  {
   cout<<e.display();
  }

 }// end of while(1)

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