Russian Qt Forum
Ноябрь 24, 2024, 06:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с исключениями  (Прочитано 3825 раз)
iukash
Гость
« : Апрель 15, 2011, 13:37 »

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

У меня ловятся исключения, которые я сам генерирую, иначе никак:
Код
C++ (Qt)
if(!file_open){
   throw 5;
}
 

В Qt везде обходятся без исключений, везде проверки на ошибки. Но я в проектах их использую: создал класс исключения, который знает имя файла и номер строки вызова throw, поставил глобальный хук, отправляющий инфу об исключении в базу,  так очень легко отслеживать ошибки у сотрудников в локалке.
Могу поделиться идеей.
Записан
iukash
Гость
« Ответ #2 : Апрель 15, 2011, 14:53 »

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

Да, нет, спасибо, было интересно именно обработать исключение которое само генерируется а не мной, если я знаю где исключение и почему оно генерится могу сам подстроиться.
Просто такое решение сразу в голову пришло, а
Цитировать
   
     if(!file_open)
    {
        file_open->open(QFile::ReadOnly | QFile::Text);
    }
не сразу!  Улыбающийся

только убери восклицательный знак и инициализируй указатель значением NULL
Записан
pokidoff
Гость
« Ответ #4 : Апрель 15, 2011, 15:35 »

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

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

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

Ну и явная инициализация указателя еще никому не вредила. К тому же NULL эквивалентен 0, так что ниче я не попутал
« Последнее редактирование: Апрель 15, 2011, 15:48 от mutineer » Записан
pokidoff
Гость
« Ответ #6 : Апрель 15, 2011, 15:52 »

И как же он туда войдет, когда указатель равен нулю? Ты сам себе противоречишь.
Записан
mutineer
Гость
« Ответ #7 : Апрель 15, 2011, 15:54 »

И как же он туда войдет, когда указатель равен нулю? Ты сам себе противоречишь.

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


Страница сгенерирована за 0.067 секунд. Запросов: 21.