Форум программистов, компьютерный форум CyberForum.ru

Обработка ошибок - C++

Восстановить пароль Регистрация
 
some777
3 / 3 / 0
Регистрация: 25.09.2009
Сообщений: 114
31.10.2011, 17:57     Обработка ошибок #1
Есть главный класс и несколько дочерних, входящих как в состав главного, так и друг в друга (не важно) Нужно в другой класс передать члена Главного класса Error, чтоб туда можно было записать строку ошибки, а также передавать далее в классы, но чтоб всегда возвращалось значение ошибки.
В приведенном фрагменте (писал без компилятора, извините за ошибки), Error класса Main_class передаётся в конструктор A_class, где указатель на Error присваивается локальной переменной, с которой и ведется дальнейшая работа. Значения Main_class::Error и A_class::error не совпадают. Почему? Поправьте пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Main_class
{
public:
   AnsiString Error;
   A_class *A;
private:
};
 
 
//---------------------------
class A_class
{
public:
   A_class(AnsiString &err);
   __property AnsiString Error = {read = getError, write = setError};
private:
   AnsiString *error;
   AnsiString getError(void);
   void setError(AnsiString Value);
};
//-------------------------------------------------
A_class::A_class(AnsiString &err)
{
   error = err;
}
AnsiString A_class::getError(void)
{
   return error;
}
void A_class::setError(AnsiString Value)
{
   error = Value;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 17:57     Обработка ошибок
Посмотрите здесь:

Обработка ошибок C++
Обработка исключений и ошибок C++
C++ Обработка ошибок
C++ обработка ошибок. "ссылка на неразрешенный внешний символ"
C++ Обработка ошибок неправильного заполнения структуры tm?
Visual C++ 2012. Консоль. scanf(). Обработка ошибок ввода C++
Задать функцию которая возвращает частное деление двух чисел (обработка ошибок - через исключения) C++
C++ Чтение числа из потока и обработка ошибок

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
31.10.2011, 18:54     Обработка ошибок #2
я делаю так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#inlude "TError.h" //шаблонный класс обработки ошибок
 
class CTest: public TError<CTest>  //подключаю обработчик ошибок
{
     Cildren myTest;
     ...
     public: 
          int Do() 
          {   
                SetError( myTest.Do() );   //если агрегированный класс вернул не ноль,
                                                       // значит метод завершился ошибкой
 
                ReactionError( METHOD_DO );  //Проверить, была ли ошибка, и отреагировать на неё.
                                                              //METHOD_DO  - идетификатор инцидента (метода), 
                                                              //в котором произошла ошибка
 
                return GetLastError(); //передать вызывающей стороне данные об ошибке (или успехе)
           }
};
Фокус в том, что благодаря специализации шаблона можно легко создать совершенно уникальный обработчик ошибок для самых разных конкретных классов.
Любой метод внутри класса, который может вернуть ошибку - должен быть проверен.
И если факт ошибки установлен - должна быть соответствующая реакция на эту ошибку.
Происходить это должно автоматически

Два слова о ReactionError( METHOD_DO );
Если ошибка -программная, понятно - зажгётся фонарик, который не очень вежливо потребует присутствия программиста.

Но если ошибка - некорректные входные данные (а они в принципе могут быть не корректными) - просто уведомление об отказе работать даже не обрушить программу.

Фишка в том, что внутри ReactionError( METHOD_DO );
все возможные программные ошибки можно оформить таким образом, что их обработка не войдёт в релиз.

Добавлено через 9 минут
при таком подходе "подъем" ошибки начинается с глубины. То есть, отказал самый низкоуровневый модуль, от него начинается цепная реация - более верхие модули фиксируют сбой, и в соответствии со своими обработчиками ошибок принимают решения. Если сами не могут исправить проблему, передают её на уровень выше.

Чем выше уровень, тем ниже вероятность, что сбой удастся устранить.

В отдельных ситуациях, на тестах, я наблюдал как пищали классы один за другим по цепочке: ошибка!" "ошибка!"

/резюмируя: Информация об ошибке идет снизу вверх, а не с верха вниз.
Yandex
Объявления
31.10.2011, 18:54     Обработка ошибок
Ответ Создать тему
Опции темы

Текущее время: 18:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru