Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2011, 11:06   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
Вопрос Недостижимый код

Вот отрывок кода из приложения...
Код:
switch (n)
{
       case 1 : this->russian = s; break;
       case 2 : this->english = s; break;
       default: throw MyException("Wrong number!"); break;
}
Однако, C++ Builder выплёвывает предупреждение,выделяя вот эту строчку
Код:
default: throw MyException("Wrong number!"); break;
И говорит, якобы это "Unreachable code". Это ещё почему?
_-Re@l-_ вне форума Ответить с цитированием
Старый 03.05.2011, 12:03   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

_-Re@l-_ покажи полностью код метода где приведенный в посте кусок кода находится.

Последний раз редактировалось profi; 03.05.2011 в 12:14.
profi вне форума Ответить с цитированием
Старый 03.05.2011, 12:17   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Правильно говорит.

Недостижим код обработки исключений. Выделите его в отдельную функцию и вызывайте через default.
Код:
switch (n)
{
       case 1 : this->russian = s; break;
       case 2 : this->english = s; break;
       default: Err(); break;
}
Например вот так:
void __fastcall TForm1::Err()
{
throw MyException("Wrong number!");
}
В этом случае ошибка не выскакивает.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 04.05.2011 в 06:28.
Smitt&Wesson вне форума Ответить с цитированием
Старый 03.05.2011, 12:21   #4
Sheva144
 
Регистрация: 18.04.2011
Сообщений: 4
По умолчанию

Попробуй не через switch, а через цепочку if . Иногда ошибка исчезает.
Я горжусь двумя людьми Гагариным и Ньютоном. Первый попытался сбежать с этой планеты, а второй доказал, что у первого ничего не выйдет.

Последний раз редактировалось Sheva144; 03.05.2011 в 12:27.
Sheva144 вне форума Ответить с цитированием
Старый 03.05.2011, 12:28   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Этот то код к чему лепиться в этой теме ?
Пардон. "Левый" код уже убран.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 04.05.2011 в 06:27.
Smitt&Wesson вне форума Ответить с цитированием
Старый 03.05.2011, 13:14   #6
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Smitt&Wesson ну а какая разница? В MinGW все работает замечательно. Это какие-то тормоза билдера.
profi вне форума Ответить с цитированием
Старый 04.05.2011, 00:03   #7
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

_-Re@l-_

И говорит, якобы это "Unreachable code". Это ещё почему?

ознакомься с тем, какие действия выполняет оператор throw
Rififi вне форума Ответить с цитированием
Старый 04.05.2011, 06:26   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
Smitt&Wesson ну а какая разница? В MinGW все работает замечательно. Это какие-то тормоза билдера.
Совершенно верно. Но вопрос-то именно по Билдеру. У меня на обоих (5-й, 6-й) выдаёт аналогичную ошибку.
Если выделить в отдельную функцию, ошибка пропадает.
Попробуйте ещё вот такую конструкцию:

Код:
default : try{} catch(...) {MyException("Wrong number!"); break;}
Ошибку, вроде, не выбивает. Но будет ли реагировать на исключения, не проверял.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 04.05.2011 в 06:38.
Smitt&Wesson вне форума Ответить с цитированием
Старый 12.05.2011, 15:14   #9
Xydan
Новичок
Джуниор
 
Регистрация: 10.07.2008
Сообщений: 1
Сообщение Недостижимый код

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Совершенно верно. Но вопрос-то именно по Билдеру. У меня на обоих (5-й, 6-й) выдаёт аналогичную ошибку.
Если выделить в отдельную функцию, ошибка пропадает.
Попробуйте ещё вот такую конструкцию:

Код:
default : try{} catch(...) {MyException("Wrong number!"); break;}
Ошибку, вроде, не выбивает. Но будет ли реагировать на исключения, не проверял.
Да все тут просто, убери в конце строчки
Код:
default : ...код...; break;}
оператор break и перестанет ругаться.
Дело в том, что дефолт считается конечной точкой свича, и поэтому брейкиться ему уже не нужно, так как после дефолта ничего нет.
Все будет работать, и генерация исключения тоже.
Xydan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доп.код,обратный код,прямой код вычисления Lukas077 Помощь студентам 0 20.03.2011 12:07
Код написал код, но ответ постоянно один и тот же SkuLLL Помощь студентам 4 14.12.2010 19:25
код С++ bpystep Помощь студентам 4 19.09.2010 20:32
код n! на C++ diana1002 Помощь студентам 1 01.10.2009 20:34
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37