0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 7
|
|||||||||||
1 | |||||||||||
Вынесение проверки try catch в отдельную функцию07.06.2015, 08:09. Показов 3136. Ответов 12
Метки нет (Все метки)
Смысл в чем, вот есть у меня необходимость ловить много EConvertError при введении параметров из LabeledEdit, если для каждого элемента писать в теле исполняемой функции эту проверку, то это "тело" раздувается раза в три как минимум. Не долго думая написал функцию, но при ее выполнении - ошибка доступа.
В целом интересно можно ли подобную проверку вынести в отдельную функцию что бы оно работало. Прогу пишу в С++ Builder 6. Наверняка на момент первого ответа уже будет поздно, но надеюсь что нет. На самом деле функция работает каким-то макаром, но вот именно код в блоке try не выполняется хоть ты ему лоб расшиби... но для каждого элемента прописывать проверку отдельно, учитывая их количество и необходимость указывать где именно оператор ввел неправильно параметр, просто невъ***чески тупо... ну не верю что нельзя.
0
|
07.06.2015, 08:09 | |
Ответы с готовыми решениями:
12
Вынесение кода в отдельную функцию Вынесение цикла в отдельную функцию и ее вызов вынесение процедур и функций в отдельную dll С# Описать отдельную функцию проверки, упорядочены ли элементы заданного массива по возрастанию |
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
|
|
07.06.2015, 09:03 | 2 |
А прикол в том, что try catch, это не функции, а ссылки на обработчик прерывания. Фактически, что происходит. try, в области памяти, резервирует ссылку на функцию обработчика ошибок. В момент возникновения ошибки, управление передаётся на эту ссылку.
Таким образом, try и catch не могут быть самостоятельно включены в проверочную функцию. В том виде, в котором Вы хотите - низя. Но, можно в обработчике catch прописать оператор switch. Тогда все сообщения можно выбирать по коду ошибки. Да и ещё совет. Научитесь использовать функции препроцессора #ifdef, #ifndef, #defined и #if. Это позволяет выключать отладочные модули, не удаляя их из программы.
1
|
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 7
|
||||||
07.06.2015, 09:46 [ТС] | 3 | |||||
Вот какая крокозябра у меня выходит в одной из функций:
С предпроцессорами нас работать вообще не учили еще, да и как это поможет? Надеюсь хоть суть вопроса стала понятнее.
0
|
управление сложностью
|
||||||
07.06.2015, 09:55 | 4 | |||||
А зачем вы каждый раз задаете конструкцию - try/catch ?
Обычно же в try пишется какое-то значение, в catch идет обработка Добавлено через 1 минуту
0
|
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 7
|
|
07.06.2015, 10:34 [ТС] | 5 |
Задаю каждый раз потому что нужно поймать в каком именно конвертере произошла ошибка, ясен пень что весь код можно было в try загнать и потом просто констатировать что ошибка есть, а вот насчет "в catch вы не передаете значение number" пожалуйста поподробнее. Мне и не надо что бы код исполнялся если ошибка произошла, то есть если сработал catch, или я и тут чего-то не понимаю?
0
|
управление сложностью
|
||||||
07.06.2015, 10:49 | 6 | |||||
В try проверяется исключение. В catch обрабатывается это исключение, причем обработок может быть несколько, в зависимости от параметра в catch()
Пример с msdn
0
|
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 7
|
|
07.06.2015, 11:06 [ТС] | 7 |
Это я знаю, или Вы хотите сказать что можно прописать catch так что бы там именно выполнялся нужный код если ошибки не произошло?
Впрочем есть предположение что нужно было просто тупо return убрать что бы все заработало, но это только предположение с которым за неимением времени повожусь чуть позже... и которое наверняка неверное. Ошибки моя функция ловила на ура и выводила даже правильно поле в котором ошибка, вся проблема именно в невыполнении кода в контейнере try.
0
|
управление сложностью
|
|
07.06.2015, 11:25 | 8 |
Т.е. как я понял, вам нужно проверять поля на наличие алфавитных символов? Т.е. не при вводе в Edit, а уже после того как заполнены некоторые поля ?
Почему не воспользоваться масской ввода ?
0
|
07.06.2015, 11:46 | 9 | |||||
Сообщение было отмечено Buyaga Dodzyo как решение
Решение
От исключений к кодам возврата?
А вообще ничто не мешает создать свой класс исключений содержащий например id места ошибки. Добавлено через 5 минут Edit и отрицательные числа
1
|
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 7
|
|
07.06.2015, 12:00 [ТС] | 10 |
Может потому что я с таким еще не сталкивался, вообще я заблочил ввод любых символов кроме цифр и запятой, там где целочисленные вводные - проблем нет, а вот запятую можно и 2 раза ввести что и приведет к ошибке конвертирования. Ошибка вылазит при конвертировании, а не вводе, вот где собака покопалась.
Avazart спасибо, над первым поработаю так как понятнее, а вот со вторым буду бодаться еще больше... вот если бы еще предыдущий вариант вернул, там где было через функцию, не успел запомнить. Уже хотя бы не мрак...
0
|
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 7
|
|
07.06.2015, 14:25 [ТС] | 12 |
Я с масками ввода еще не работал, а разбираться времени нет, оно может и проще было, но время у меня на дописание проги времени до 0:00, так что...
Добавлено через 1 час 55 минут Avazart, попытался втулить данный Вами код в функцию, как только до нее доходит так сразу пишет переполнение операции с плавающей точкой (floating point overflow)... Бред какой-то, но как есть.
0
|
Avazart
|
07.06.2015, 15:32
Вынесение проверки try catch в отдельную функцию
#13
|
Не по теме: Кто вам винова коли руки кривы, и вы даже код втавить не можете, и вообще какого код в две строчки пихать в функцию.
0
|
07.06.2015, 15:32 | |
Вынесение кода в функцию не работает Как выдернуть функцию локализации приложения в отдельную функцию из имеющегося проекта Try catch реализация для проверки вводимых типов данных в объект Что использовать для проверки корректности введенного значения - If или try catch? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |