C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Исключение, сгенерированное внутри класса
exp
Отправлено: 02.12.2005, 23:50


Мастер участка

Группа: Участник
Сообщений: 304



Есть класс CRightGroup /*то биш права группы пользователей*/. У него метод SetRights с параметрами НОВЫЕ ПРАВА и ССЫЛКА НА РЕДАКТИРУЮЩУЮ ГРУППУ (то есть группу, к которой принадлежит пользователь, пытающийся отредактировать права данной группы). В случае отсутствия прав метод кидает исключение типа char* ,мол прав нету.
Это я делаю так:

CODE

void CRightGroup::SetRight(int NewRight,CRightGroup *RGMember)
{
if(RGMember == 0) Rights = NewRight;
else
{
if(RGMember->Rights & RI_EDITGROUPS) Rights = NewRight;
else throw "НЕТ ПРАААААВ!";
}
}

Дальше пытаюсь отловить его в программе и делаю так:
CODE

try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (char *ErrMsg) // По задумке, этот блок должен его поймать.
{
Application->MessageBoxA(ErrMsg,"Access denied", MB_ICONWARNING|MB_OK);
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;

Но ничего подобного не происходит. Выполнение не заходит ни в один из этих catch()-блоков.
Собственно код специально вызывающий исключение:
CODE

CRightGroup C; // Создаю группу. Она сразу создается с максимальными правами
ShowMessage(C.GetRight(&C));//Сам себя проверяю
C.SetRight(RI_NONE,&C); // Устанавливаю нулевые права группы. Устанавливающая группа — C (ей-то все можно)
C.SetRight(RI_EDITGROUPS,&C); // теперь прав нет, а группа пытается выставить себе права на редактирование групп. Должен возникнуть exception.
// он-то и возникает, но обрабатывается неведомым мне обработчиком.

Как быть? Может есть способы красивее?

Отредактировано exp — 02/12/2005, 23:52
Георгий
Отправлено: 03.12.2005, 03:11


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



попробуй
CODE
catch(char**){...}
да и вообще кидать исключения стандартных типов это плохо — лучше сделать свой класс или дерево исключений и кидать уже их

Вернуться в Вопросы программирования в C++Builder