Есть код:
Parse::ParseSpill(){
#ifdef DEBUG
// std::cout<<"Parsing Spill!"<<"\n"<<std::endl;
fflush(out);
#endif
SPILL spill;
spill.error=0;
EVENT event;
try{
while(true){
if (1!=fread(&data, sizeof(data),1,file)) throw ReadError;
};
if(isEventHeader(data)){
currentEvent=data;
event=parseEvent();
spill.event.push_back(parseEvent());
if ((event.error & ReadError)== ReadError) throw ReadError;
}
if (isSpillTrailer(data)) return spill;
}
}
catch (int i){
switch (i){
case ReadError:
spill.error= spill.error & ReadError;
return spill;
break;
case SpillTrailer:
spill.error+=i;
return spill;
break;
default:
throw;
break;
}
}
return ....
вызывается примерно так:
ob1->ParseSpill(); в бесконечном цикле до появления spill.error&ReadError==ReadError;
определение ReadError:
const int ReadError = 1;
Почему-то не попадает в блок catch (int i)
Если убрать условие и просто написать вместо выделенного throw ReadError; все работает.
Подскажите, в чем дело?
Решено: Исключения С++
Модератор: Модераторы разделов
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Решено: Исключения С++
А ещё на форуме есть тег [ codebox ] и форматирование кода. В коде, который представлен в таком виде, мало кто захочет разбираться.
-
Olegator
- Сообщения: 2493
- ОС: SuseLinux 11.2 KDE 4.3
Re: Решено: Исключения С++
расставьте табуляцию, читать же не удобно
-
AestheteAnimus
- Сообщения: 135
- ОС: FreeBSD 8.0-RELEASE amd64
Re: Решено: Исключения С++
Код: Выделить всё
Parse::ParseSpill(){
#ifdef DEBUG
// std::cout<<"Parsing Spill!"<<"\n"<<std::endl;
fflush(out);
#endif
SPILL spill;
spill.error=0;
EVENT event;
try{
while(true){
if (1!=fread(&data, sizeof(data),1,file)) throw ReadError;
}; // <- ЭТО ЧТО ЗА СКОБКА?!
if(isEventHeader(data)){
currentEvent=data;
event=parseEvent();
spill.event.push_back(parseEvent());
if ((event.error & ReadError)== ReadError) throw ReadError;
}
if (isSpillTrailer(data)) return spill;
}
}
catch (int i){
switch (i){
case ReadError:
spill.error= spill.error & ReadError;
return spill;
break;
case SpillTrailer:
spill.error+=i;
return spill;
break;
default:
throw;
break;
}
}
return ....И вообще, код должен быть более читабелен.
-
avaava
- Сообщения: 27
- ОС: Linux
Re: Решено: Исключения С++
Это просто опечатка.
Я разобрался, спасибо за участие. Тему лучше закрыть)
Я разобрался, спасибо за участие. Тему лучше закрыть)