Russian Qt Forum
Ноябрь 24, 2024, 06:51
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Работа с исключениями
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Работа с исключениями (Прочитано 3829 раз)
iukash
Гость
Работа с исключениями
«
:
Апрель 15, 2011, 13:37 »
В общем следующий вопрос, как работать с исключениями. Делаю так
Цитировать
QFile *file_open;
try
{
file_open->open(QFile::ReadOnly | QFile::Text);
}
catch(...)
{
}
Только указатель определяется глобально а объект создается в другой функции, но если он не создался то происходит это. Но суть не именно конкретно этого примера а вообще работы с исключениями на примере этой ситуации.
В общем при таком коде все равно исключение и оно не попадает в catch! Что делать?
Записан
pokidoff
Гость
Re: Работа с исключениями
«
Ответ #1 :
Апрель 15, 2011, 13:50 »
У меня ловятся исключения, которые я сам генерирую, иначе никак:
Код
C++ (Qt)
if
(
!
file_open
)
{
throw
5
;
}
В Qt везде обходятся без исключений, везде проверки на ошибки. Но я в проектах их использую: создал класс исключения, который знает имя файла и номер строки вызова throw, поставил глобальный хук, отправляющий инфу об исключении в базу, так очень легко отслеживать ошибки у сотрудников в локалке.
Могу поделиться идеей.
Записан
iukash
Гость
Re: Работа с исключениями
«
Ответ #2 :
Апрель 15, 2011, 14:53 »
Цитировать
У меня ловятся исключения, которые я сам генерирую, иначе никак
Спасибо, теперь буду знать!
Цитировать
Могу поделиться идеей
Да, нет, спасибо, было интересно именно обработать исключение которое само генерируется а не мной, если я знаю где исключение и почему оно генерится могу сам подстроиться.
Просто такое решение сразу в голову пришло, а
Цитировать
if(!file_open)
{
file_open->open(QFile::ReadOnly | QFile::Text);
}
не сразу!
Записан
mutineer
Гость
Re: Работа с исключениями
«
Ответ #3 :
Апрель 15, 2011, 14:58 »
Цитата: iukash от Апрель 15, 2011, 14:53
Да, нет, спасибо, было интересно именно обработать исключение которое само генерируется а не мной, если я знаю где исключение и почему оно генерится могу сам подстроиться.
Просто такое решение сразу в голову пришло, а
Цитировать
if(!file_open)
{
file_open->open(QFile::ReadOnly | QFile::Text);
}
не сразу!
только убери восклицательный знак и инициализируй указатель значением NULL
Записан
pokidoff
Гость
Re: Работа с исключениями
«
Ответ #4 :
Апрель 15, 2011, 15:35 »
Цитировать
только убери восклицательный знак и инициализируй указатель значением NULL
Мсье, вы попутали Delphi с C++. В плюсах все указатели целочисленные и их следует инициализировать 0, а так как это к тому же означает FALSE, то я имею полное право писать логическое НЕ в условии!
Записан
mutineer
Гость
Re: Работа с исключениями
«
Ответ #5 :
Апрель 15, 2011, 15:46 »
Цитата: pokidoff от Апрель 15, 2011, 15:35
Цитировать
только убери восклицательный знак и инициализируй указатель значением NULL
Мсье, вы попутали Delphi с C++. В плюсах все указатели целочисленные и их следует инициализировать 0, а так как это к тому же означает FALSE, то я имею полное право писать логическое НЕ в условии!
Имеешь-имеешь, вот только при таком условии внутрь ифа код войдет, когда указатель будет равен 0, что означает что объета там нет и работа с этим указателем как с валидным мало к чему хорошему приведет
Ну и явная инициализация указателя еще никому не вредила. К тому же NULL эквивалентен 0, так что ниче я не попутал
«
Последнее редактирование: Апрель 15, 2011, 15:48 от mutineer
»
Записан
pokidoff
Гость
Re: Работа с исключениями
«
Ответ #6 :
Апрель 15, 2011, 15:52 »
И как же он туда войдет, когда указатель равен нулю? Ты сам себе противоречишь.
Записан
mutineer
Гость
Re: Работа с исключениями
«
Ответ #7 :
Апрель 15, 2011, 15:54 »
Цитата: pokidoff от Апрель 15, 2011, 15:52
И как же он туда войдет, когда указатель равен нулю? Ты сам себе противоречишь.
Нулевой указатель при приведении к булевому значению становится равен false. Логическое отрицание false дает true. Передача true ифу приводит к входу во внутренний блок. Где противоречие?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...