Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос об исключениях (try,catch,throw)

489
05 ноября 2007 года
NeO_u
277 / / 11.10.2006
В майкрософтовском C++ (Microsoft Visual C++ 6.0 - работаю только с этой версий) есть возможность самому создавать исключения, т.е.
 
Код:
try
{
   //некоторые действия
    throw new exception("ля ля ля");
}
catch(exception e)
{
    //можно обрабатывать этот exception
}


я попробывал реализовать такой же код в борланде, но появилась ошибка типа "че такое exception"...
Искал долго в хелпе нашел что есть в стле except, попробывал его поюзать, но не получилось:-(

Может кто подскажет?

ЗЫЫ: интересует консольный вариант без VCL. (без SysUtils.hpp)
240
05 ноября 2007 года
aks
2.5K / / 14.07.2006
Дык правильно говорит, что такое exception и где он описан?
МОжно кидать в исключении любой тип - главное чтоб он существовал. ))
489
05 ноября 2007 года
NeO_u
277 / / 11.10.2006
я же не спорю, что правильно говорит, но если у вас стоит студия, попробуйте создать простое консольное приложений и вставить туда блок:
 
Код:
include <exception>
using namespace std;
try
{
   throw new exception("Test");
}
catch (exception *e)
{
    e->what();
}


и будет все замечательно работать:-)

берем этот же код и вставляем в C++ Borland и получаем как не странно, болт:-(
а точнее ошибку:
[BCC32 Error] Unit1.cpp(48): E2285 Could not find a match for 'exception::exception(const char *)'

ЗЫЫ: ошибка вполне понятная....но встает вопрос: что делать и как быть?:-)
240
05 ноября 2007 года
aks
2.5K / / 14.07.2006
Ну билдер все правильно пишет не смотря на свою обычную глючность. )
Согласно стандарту в классе std::exception нет конструктора с таким параметром (строкой):
 
Код:
namespace std {
  class exception {
  public:
    exception() throw();
    exception(const exception&) throw();
    exception& operator=(const exception&) throw();
    virtual &#732;exception() throw();
    virtual const char* what() const throw();
  };
}


То что тот код работает в MSVC - ни о чем не говорит. Следуйте стандарту и независимой от компилятора документации по стандартной библиотеке и все будет работать и переноситься без проблем.
А вот зачем кидать свое исключение экземпляром класса exception - не совсем понятно. Можно было бы и поконкретней сделать исключения или свой объявить в том числе и отнаследовав от std::exception
3.2K
05 ноября 2007 года
nikipelovav
152 / / 12.04.2006
Попробуй заменить код
 
Код:
throw new exception("Test");
на
 
Код:
throw Exception("Test");
489
05 ноября 2007 года
NeO_u
277 / / 11.10.2006
Цитата: nikipelovav
Попробуй заменить код
 
Код:
throw new exception("Test");
на
 
Код:
throw Exception("Test");



Exception - это класс VCL. и объявлен он в SysUtils.hpp.

489
05 ноября 2007 года
NeO_u
277 / / 11.10.2006
Цитата: aks
Ну билдер все правильно пишет не смотря на свою обычную глючность. )
Согласно стандарту в классе std::exception нет конструктора с таким параметром (строкой):
 
Код:
namespace std {
  class exception {
  public:
    exception() throw();
    exception(const exception&) throw();
    exception& operator=(const exception&) throw();
    virtual &#732;exception() throw();
    virtual const char* what() const throw();
  };
}


То что тот код работает в MSVC - ни о чем не говорит. Следуйте стендарту и независимой от компилятора документации по стандартной библиотеке и все будет работать и переноситься без проблем.
А вот зачем кидать свое исключение экземпляром класса exception - не совсем понятно. Можно было бы и поконкретней сделать исключения или своя объявить в том числе и отнаследовав от std::exception



Спасибо за совет. Буду пробывать.

489
06 ноября 2007 года
NeO_u
277 / / 11.10.2006
А у кого-нибудь имеется дока по этим блокам и работай с ними? желательно с уклоном на борландовский Си..в инете нарыл, но там идет с уклоном на майкрософтовский си и оч много различий...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог