Решено: Исключения С++

Модератор: Модераторы разделов

avaava
Сообщения: 27
ОС: Linux

Решено: Исключения С++

Сообщение avaava »

Есть код:
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: Решено: Исключения С++

Сообщение Assuri »

А ещё на форуме есть тег [ codebox ] и форматирование кода. В коде, который представлен в таком виде, мало кто захочет разбираться.
Спасибо сказали:
Olegator
Сообщения: 2493
ОС: SuseLinux 11.2 KDE 4.3

Re: Решено: Исключения С++

Сообщение Olegator »

расставьте табуляцию, читать же не удобно
Спасибо сказали:
Аватара пользователя
AestheteAnimus
Сообщения: 135
ОС: FreeBSD 8.0-RELEASE amd64

Re: Решено: Исключения С++

Сообщение AestheteAnimus »

Код: Выделить всё

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: Решено: Исключения С++

Сообщение avaava »

Это просто опечатка.
Я разобрался, спасибо за участие. Тему лучше закрыть)
Спасибо сказали: