1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 101
|
||||||
1 | ||||||
Ошибка с оператором switch13.09.2013, 13:54. Показов 3047. Ответов 35
Метки нет (Все метки)
Добрый день! Я писала программу в VS2010, но потом появилась необходимость запустить программу в 2008. После запуска, она ругается на этот участок кода:
Не могу найти ошибку, копировала все. Помогите, пожалуйста!
0
|
13.09.2013, 13:54 | |
Ответы с готовыми решениями:
35
Загвоздка с оператором switch Программа с оператором SWITCH Программа с оператором switch Работа с оператором switch в цикле |
1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 101
|
|
13.09.2013, 15:20 [ТС] | 3 |
я закомментировала скобку. программа выдает другую ошибку
initialization of 'count' is skipped by 'case' label see declaration of 'count'
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
13.09.2013, 15:48 | 5 |
Если внутри одного из case'ов объявляются переменные, то эта ветвь должна быть заключена в фигурные скобки.
0
|
1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 101
|
|
14.09.2013, 16:41 [ТС] | 6 |
Кроме этого кода есть WinMain с объявлением DialogBox и пара функций. Если я ставлю скобку, программа ругается на case.Если убрать скобку- на count,объявленный внутри case. но в 2010 студии программа работала нормально, почему в 2008 появились такие проблемы?
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
14.09.2013, 23:00 | 8 |
Скобки должны быть парными.
Вероятно потому что 2010я более лояльно отнеслась к коду. Например в C# в подобной ситуации скобки не нужны. Дело не в конфликте имён, а в отсутствии ограничения на область видимости переменной, объявленной внутри switch. Надо просто поставить скобки. Добавлено через 8 минут Она не лишняя. Для неё нужна парная между 7й и 8й строками. Добавлено через 4 минуты Маловероятно. Даже 2012я не позволяет скомпилировать подобный код.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
14.09.2013, 23:16 | 9 |
про скобки
https://www.cyberforum.ru/faq/... ost4366233
1
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
14.09.2013, 23:59 | 10 |
Всё равно не скомпилируется. Дело именно в области видимости, а не в разнице между оператором и объявлением переменной (которое тоже оператор, кстати говоря).
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
15.09.2013, 00:22 | 12 |
ValeryS, ну не надо бред писать...
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
|
|
15.09.2013, 00:34 | 13 |
интересно в чем бред
ошибку читал "illegal case" перевести ? "незаконный (нелегальный) case" а что там в case ? IDC_BUTPRESS IDC_BUTCLOSE это что ? идентификаторы кнопок, макросы которые у студии определяются в файле resourse.h это вы тут разогнали за скобки да область видимости где это в ошибке?
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
15.09.2013, 00:39 | 14 |
Во-первых, в процитированном сообщении скобка в 31 строке закрывает switch (которая на самом деле непарная), именно поэтому следующий за ней case становится illegal. Но это написано сразу же в следующем посте, т. е. уже не актуально.
Во-вторых, в оставшейся части темы (после удаления данной скобки) обсуждается другая ошибка, а именно "initialization of 'count' is skipped by 'case' label see declaration of 'count'", которая вызвана именно отсутствием пары скобок у кода соответствующей ветви.
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
15.09.2013, 01:04 | 16 |
Ну а прочитать
не судьба?
Добавлено через 1 минуту А вообще, изначально я ответил чисто по тексту ошибки, не рассматривая код. Потому что такая ошибка с переменной в case абсолютно очевидна.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
15.09.2013, 05:13 | 18 |
Скомпилируется:
Чушь. Объявление переменной — это не оператор (statement), а декларация (declaration). Пруфы в стандарте.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
15.09.2013, 11:11 | 19 |
PS. Моё сообщение следует относить только к языку C.
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
||||||
15.09.2013, 13:25 | 20 | |||||
VS такое компилирует и без точкм с запятой. А вот если добавить ещё одну ветвь case после этой, то нет, опять же независимо от наличия точкм с запятой.
Я говорил о Си++. На Си вообще все объявления должны идти в начале блока. В общем, с точкой с запятой на си не компилируется независимо от наличия фигурных скобок. Без точки с запятой компилируется только с присутствующими фигурными скобками. VS2012. Тогда почему такой код компилируется и работает?
0
|
15.09.2013, 13:25 | |
15.09.2013, 13:25 | |
Помогаю со студенческими работами здесь
20
Работа с оператором Switch case Нужно написать программу с оператором switch Затруднения с условным оператором switch ( типы данных) Задача с оператором switch: юзер вводит значение температуры и видит на экране совет о том как одеться Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |