Russian Qt Forum

Qt => Общие вопросы => Тема начата: iukash от Апрель 15, 2011, 13:37



Название: Работа с исключениями
Отправлено: iukash от Апрель 15, 2011, 13:37
В общем следующий вопрос, как работать с исключениями. Делаю так
Цитировать
   
    QFile *file_open;
    try
    {
        file_open->open(QFile::ReadOnly | QFile::Text);
    }
    catch(...)
    {
    }
Только указатель определяется глобально а объект создается в другой функции, но если он не создался то происходит это. Но суть не именно конкретно этого примера а вообще работы с исключениями на примере этой ситуации.
В общем при таком коде все равно исключение и оно не попадает в catch! Что делать?


Название: Re: Работа с исключениями
Отправлено: pokidoff от Апрель 15, 2011, 13:50
У меня ловятся исключения, которые я сам генерирую, иначе никак:
Код
C++ (Qt)
if(!file_open){
   throw 5;
}
 

В Qt везде обходятся без исключений, везде проверки на ошибки. Но я в проектах их использую: создал класс исключения, который знает имя файла и номер строки вызова throw, поставил глобальный хук, отправляющий инфу об исключении в базу,  так очень легко отслеживать ошибки у сотрудников в локалке.
Могу поделиться идеей.


Название: Re: Работа с исключениями
Отправлено: iukash от Апрель 15, 2011, 14:53
Цитировать
У меня ловятся исключения, которые я сам генерирую, иначе никак
Спасибо, теперь буду знать!
Цитировать
Могу поделиться идеей
Да, нет, спасибо, было интересно именно обработать исключение которое само генерируется а не мной, если я знаю где исключение и почему оно генерится могу сам подстроиться.
Просто такое решение сразу в голову пришло, а
Цитировать
   
     if(!file_open)
    {
        file_open->open(QFile::ReadOnly | QFile::Text);
    }
не сразу!  :)


Название: Re: Работа с исключениями
Отправлено: mutineer от Апрель 15, 2011, 14:58
Да, нет, спасибо, было интересно именно обработать исключение которое само генерируется а не мной, если я знаю где исключение и почему оно генерится могу сам подстроиться.
Просто такое решение сразу в голову пришло, а
Цитировать
   
     if(!file_open)
    {
        file_open->open(QFile::ReadOnly | QFile::Text);
    }
не сразу!  :)

только убери восклицательный знак и инициализируй указатель значением NULL


Название: Re: Работа с исключениями
Отправлено: pokidoff от Апрель 15, 2011, 15:35
Цитировать
только убери восклицательный знак и инициализируй указатель значением NULL
Мсье, вы попутали Delphi с C++. В плюсах все указатели целочисленные и их следует инициализировать 0, а так как это к тому же означает FALSE, то я имею полное право писать логическое НЕ в условии!


Название: Re: Работа с исключениями
Отправлено: mutineer от Апрель 15, 2011, 15:46
Цитировать
только убери восклицательный знак и инициализируй указатель значением NULL
Мсье, вы попутали Delphi с C++. В плюсах все указатели целочисленные и их следует инициализировать 0, а так как это к тому же означает FALSE, то я имею полное право писать логическое НЕ в условии!

Имеешь-имеешь, вот только при таком условии внутрь ифа код войдет, когда указатель будет равен 0, что означает что объета там нет и работа с этим указателем как с валидным мало к чему хорошему приведет

Ну и явная инициализация указателя еще никому не вредила. К тому же NULL эквивалентен 0, так что ниче я не попутал


Название: Re: Работа с исключениями
Отправлено: pokidoff от Апрель 15, 2011, 15:52
И как же он туда войдет, когда указатель равен нулю? Ты сам себе противоречишь.


Название: Re: Работа с исключениями
Отправлено: mutineer от Апрель 15, 2011, 15:54
И как же он туда войдет, когда указатель равен нулю? Ты сам себе противоречишь.

Нулевой указатель при приведении к булевому значению становится равен false. Логическое отрицание false дает true. Передача true ифу приводит к входу во внутренний блок. Где противоречие?