Russian Qt Forum
Июня 13, 2025, 15:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с исключениями  (Прочитано 3995 раз)
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]   Вверх
  Печать  
 
Перейти в:  


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