Как обойти ошибку
В своей программе я столкнулся с одной штукой.
По разным причинам(причины не случайные) программа выдаёт ошибку и останавливается,
можно ли зделать что то на подобии такого:
//Объявляю с верху
Если Ошибка то GoTo 1:
//тело прогреаммы
......
......
......
......
1:
Если ошибка == 1 то стоп
Если ошибка == 2 то повторить операцию
Если ошибка == 3 то вывести что то
и так далее
Пример его использования есть в любом билдеровском проекте в главном модуле. Тебе нужно объявить свои классы исключений, соответствующие определенной ошибке...
можно... другими словами тебе нужно сделат свой обработчик исключительных ситуаций (exception). для этого в С++ есть оператор try{}catch{}
Пример его использования есть в любом билдеровском проекте в главном модуле. Тебе нужно объявить свои классы исключений, соответствующие определенной ошибке...
Попрошу, если не трудно, не мог бы ты Relax написать какойто пример, бо дело в чём, я только перехожу на билдер, и мне немного трудновато, но всёравно ,большое спасибо за совет, попробую разобратся.
а ошибки какого типа?
я, к сожалению, с исключениями не так много работал как хотелось бы - так в основном теория из университетского курса :), но постараюсь чего нибудь сваять...
а ошибки какого типа?
Ошибки разные:
Читаю с реестра ключ как двоичный, а какойто умник его записал как строковой(записал в реестр), выдаёт ошибку, ну вот такого типа, или вот к примеру на бейсике я писал так(при работе с файлом по сети)
IF Erorr GoTo 1:
REM Тело программы
.......
.......
1:
REM К примеру
IF Err = 53 THEN PRINT "Нет диска"
IF Err = 12 THEN PRINT "Нет доступа"
........
И так далее.
Но это помоему можно обойти, делая проверку при открытия файла, этот пример я взял чисто для наглядности.
REM Тело программы
.......
.......
1:
REM К примеру
IF Err = 53 THEN PRINT "Нет диска"
IF Err = 12 THEN PRINT "Нет доступа"
try
{
....
....
switch(Err)
{
case 53: throw Exception("Ошибка 53");break;
case 12: throw Exception("Ошибка 12");break;
...
case N: throw Exception("Ошибка N");break;
default: throw Exception("Неопознанная ошибка");
}
}
catch(Exception &e)
{
//вывод e.Message
}
try
{
....
....
switch(Err)
{
case 53: throw Exception("Ошибка 53");break;
case 12: throw Exception("Ошибка 12");break;
...
case N: throw Exception("Ошибка N");break;
default: throw Exception("Неопознанная ошибка");
}
}
catch(Exception &e)
{
//вывод e.Message
}
Спасибо suffer, прийду домой с работы то попробую
токо switch не нужен... просто надо исключение кидать и все
Что значит switch не нужен? Как тогда определять какое исключение кидать?
Что значит switch не нужен? Как тогда определять какое исключение кидать?
Я делаю что-то вроде этого и обычно хватает:
AnsiString err_strings[] =
{
"Ошибка 1",
"Ошибка 2",
"Ошибка 3"
}
try
{
//код который может вызвать ошибку
if(условие ошибки) throw 1;
//код который может вызвать ошибку
if(условие ошибки) throw 2;
//код который может вызвать ошибку
if(условие ошибки) throw 3;
......
return true;
}
catch(int err_code)
{
MessageBox(err_strings[err_code]);
return false;
}
catch(Exception &e)
{
char str[256];
wsprintf(str, "Исключение VCL - %s\nСообщение об ошибке - %s", AnsiString(e.ClassName()), e.Message);
MessageBox(str);
}