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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
some777
3 / 3 / 0
Регистрация: 25.09.2009
Сообщений: 122
#1

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

31.10.2011, 17:57. Просмотров 576. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 17:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка ошибок (C++):

Обработка ошибок - C++
Где почитать обработку ошибок при работе с текстовыми и бинарными файлами(считывание и запись),не в теории а конкретно на примерах...

обработка ошибок - C++
Есть класс треугольника, нужно, чтобы при вводе в конструктор нулей или минусовых значений вместо сторон, выдавало ошибку,получается...

Обработка ошибок - C++
void error(string s1, string s2) { throw runtime_error(s1 + s2); } int main() { setlocale(LC_ALL, "ru"); try { ...

Обработка ошибок - C++
while (1) { sh *newelem; newelem=new sh; cout<<"Write number of the car"<<"\n"; s=getch(); if (s=='*') ...

Обработка ошибок ввода - C++
Доброго времени суток. Имеется код который я написал для обработки ошибок ввода: #include <iostream> #include <cctype> #include...

Обработка ошибок (исключений) - C++
Всем привет. Делаю обработку исключений и не много не допонимаю как это работает. Во первых возникает проблема и я не понимаю почему так....

1
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 минут
при таком подходе "подъем" ошибки начинается с глубины. То есть, отказал самый низкоуровневый модуль, от него начинается цепная реация - более верхие модули фиксируют сбой, и в соответствии со своими обработчиками ошибок принимают решения. Если сами не могут исправить проблему, передают её на уровень выше.

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

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

/резюмируя: Информация об ошибке идет снизу вверх, а не с верха вниз.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2011, 18:54
Привет! Вот еще темы с ответами:

Обработка ошибок ввода - C++
Как решить? Можете помочь 9 вариант Прочитайте правила: Правила форума Пункт 5.18: Запрещено размещать задания и решения в виде...

Обработка исключений и ошибок - C++
Я недавно начал изучать обработку ошибок try catch. И сразу появились вопросы: 1)Какую библиотеку нужно использовать для исключений и...

Обработка ошибок cin (тип bool) - C++
Доброго времени суток. Собственно, проблема. Надо поймать все ошибки при вводе в тип bool: буквы, ентеры, пробелы, цифры, отличные от 0 и...

Обработка ошибок в процессе написания кода - C++
Допустим есть большая программа. Десяток(ки) файлов, файлы эти в папках. Часто используется проверка в функциях на адекватные...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru