Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Klotilda
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 101
#1

Ошибка с оператором switch - C++

13.09.2013, 13:54. Просмотров 1201. Ответов 35
Метки нет (Все метки)

Добрый день! Я писала программу в VS2010, но потом появилась необходимость запустить программу в 2008. После запуска, она ругается на этот участок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
BOOL WINAPI WndProc (HWND hwnd,UINT uMsg,WPARAM wpar,LPARAM lpar )
{
    static HWND hComb;
 
    switch (uMsg)
    {
        case WM_INITDIALOG: 
            char COMmas[6], COMnum[3];                          //массив для полного названия ком-порта с номером
            int i,SomVar;                                       // счетчик  заполнения массива для ком порта 
            hComb=GetDlgItem(hwnd,IDC_COMBO1);
            SendMessage ( hComb,CB_RESETCONTENT,0,0);
            int count=1;
            SendMessage(hComb,CB_ADDSTRING,0,(LPARAM)"Select COM port");
            for ( i=1;i<99;i++)
            {
               strcpy(COMmas,"COM");
              _itoa(i,COMnum,10);
               strcat(COMmas,COMnum);
               int Res=CreatePort(COMmas);
               if (Res==5) strcat(COMmas,"*");
               if(Res==0 || Res==5)
               {
                    SendMessage(hComb,CB_ADDSTRING,0,(LPARAM)COMmas);
                    SendMessage(hComb,CB_SETITEMDATA,count,(LPARAM)i);
                    count++;
                    if(Res==0) CloseHandle(hPort);  
               }
            }
            SendMessage(hComb,CB_SETCURSEL,0,0);
           break;  
        }    
 
       case WM_COMMAND: 
       {
         switch(LOWORD(wpar))
         {                  
             case IDC_BUTPRESS:                                  //по нажатию кнопки заполняется listbox
             {
                HWND hEdit,hEdit2,hList;
                int nVar,nVar2;
                char cLocvar[6];
                hEdit2=GetDlgItem(hwnd,IDC_EDIT2);
                nVar=GetDlgItemInt(hwnd,IDC_EDIT1,NULL,FALSE);
                _itoa(nVar,cLocvar,10);
                char cMas[20];
                char cResMas[20];
                SendMessage (hEdit2,WM_GETTEXT,20,(LPARAM)cMas);
                int len=strlen(cMas);
                int i,j=1,k=1;
                for (i=0;i<len;i++)
                {
                     if(cMas[i]=='-') 
                        k++;    
                }
                ch=new byte [k+2];
                k=0;
 
                for (i=0;i<=len;i++)
                {
                    if(cMas[i]!='-' && cMas[i]!='\0')                     
                        cResMas[k++]=cMas[i];
 
                    else{
                        cResMas[k]='\0'; k=0;
                        ch[j++]=(byte)atoi(cResMas);
                        if(cMas[i]=='\0') break;
                    }
                }
                ch[0]=(byte)atoi(cLocvar);
                ch[j]=255;
                SendByte(ch);
                hList=GetDlgItem(hwnd,IDC_LIST1);
                SendMessage(hList,LB_ADDSTRING,0,(LPARAM)cResbuf);
                delete[] ch;
                return TRUE;
             break;
             }      
             case IDC_BUTCLOSE:                                
             {       
                EndDialog(hwnd,NULL);
                return TRUE;                                     
             }
         }                    
 
            if(HIWORD(wpar)==CBN_SELENDOK)                                 //выбор элемента списка
            {
                char COMmas[8], COMnum[3];  
                int index;
                index=SendDlgItemMessage(hwnd,IDC_COMBO1,CB_GETCURSEL,0,0);
                index=SendDlgItemMessage(hwnd,IDC_COMBO1,CB_GETITEMDATA,index,0);
                if(hPort!=INVALID_HANDLE_VALUE)
                {
                    CloseHandle(hPort); hPort = INVALID_HANDLE_VALUE;
                }
                 strcpy(COMmas,"COM");
                _itoa(index,COMnum,10);
                 strcat(COMmas,COMnum);
                 if(CreatePort(COMmas))
                 {   
                     ComPortTimeOut();
                     ComPortSettings(); 
                 }     
             
            }                                                                // end if(HIWORD(wpar)==CBN_SELENDOK)   
 
     break;                
     }                                                                      //  end case WM_COMMAND:
       
    }                                                                       // end switch (uMsg)                                                                                 
    return 0;                         
 
}
error C2046: illegal case
Не могу найти ошибку, копировала все. Помогите, пожалуйста!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 13:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка с оператором switch (C++):

Программа с оператором switch - C++
Помогите пожалуйста решить простейшую задачу с оператором switch,которая выводит на экран название животного, символизирующего этот год по...

Программа с оператором SWITCH - C++
Написал вот такую прогу выводящую дни недели. Подскажите пожалуйста или дайте часть кода, как можно реализовать то же самое через switch и...

Загвоздка с оператором switch - C++
Стоит MVS08, при вводе 5 сразу выходит из программы, а когда ошибочно, т.е. ввожу 8, он мне Error! Again the input..., ввожу 5, после...

Работа с оператором Switch case - C++
В общем такая ситуация. Надо написать что-то типо магазина и при выборе товара он должен переносить его цену в переменную и предложить...

Работа с оператором switch в цикле - C++
сhar ch; cin.get(ch); switch(ch) { case 'a': cout &lt;&lt; &quot;one &quot; &lt;&lt; endl; break; case 'b': cout &lt;&lt; &quot; two&quot; &lt;&lt; endl; break; case...

Затруднения с условным оператором switch ( типы данных) - C++
Здравствуйте! Не могу понять, как сделать без ошибки &quot; Unit1.cpp(29): E2227 Extra parameter in call to sqrt(double)&quot;. Я понимаю, что n в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 14:12 #2
В 31 строке скобка лишняя.

Добавлено через 2 минуты
Вообще со скобками непонятно. Скобки прверяйте.
0
Klotilda
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 101
13.09.2013, 15:20  [ТС] #3
я закомментировала скобку. программа выдает другую ошибку

initialization of 'count' is skipped by 'case' label
see declaration of 'count'
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 15:22 #4
Весь код давайте.
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
13.09.2013, 15:48 #5
Цитата Сообщение от Klotilda Посмотреть сообщение
initialization of 'count' is skipped by 'case' label
see declaration of 'count'
Если внутри одного из case'ов объявляются переменные, то эта ветвь должна быть заключена в фигурные скобки.
0
Klotilda
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 101
14.09.2013, 16:41  [ТС] #6
Кроме этого кода есть WinMain с объявлением DialogBox и пара функций. Если я ставлю скобку, программа ругается на case.Если убрать скобку- на count,объявленный внутри case. но в 2010 студии программа работала нормально, почему в 2008 появились такие проблемы?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.09.2013, 16:53 #7
Цитата Сообщение от Klotilda Посмотреть сообщение
Если убрать скобку- на count
Раз код не хотите показывать, то попробуйте изменить имя count, возможен конфликт имён (зависит от компилятора).
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
14.09.2013, 23:00 #8
Цитата Сообщение от Klotilda Посмотреть сообщение
Если я ставлю скобку
Скобки должны быть парными.

Цитата Сообщение от Klotilda Посмотреть сообщение
но в 2010 студии программа работала нормально, почему в 2008 появились такие проблемы?
Вероятно потому что 2010я более лояльно отнеслась к коду. Например в C# в подобной ситуации скобки не нужны.

Цитата Сообщение от alsav22 Посмотреть сообщение
попробуйте изменить имя count, возможен конфликт имён
Дело не в конфликте имён, а в отсутствии ограничения на область видимости переменной, объявленной внутри switch. Надо просто поставить скобки.

Добавлено через 8 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
В 31 строке скобка лишняя.
Она не лишняя. Для неё нужна парная между 7й и 8й строками.

Добавлено через 4 минуты
Цитата Сообщение от Klotilda Посмотреть сообщение
но в 2010 студии программа работала нормально
Маловероятно. Даже 2012я не позволяет скомпилировать подобный код.
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
14.09.2013, 23:16 #9
про скобки
http://www.cyberforum.ru/faq/thread1...ml#post4366233
1
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
14.09.2013, 23:59 #10
Цитата Сообщение от Nameless One Посмотреть сообщение
Кстати, вместо скобок после метки можно просто поставить пустой оператор (точку с запятой).
Всё равно не скомпилируется. Дело именно в области видимости, а не в разнице между оператором и объявлением переменной (которое тоже оператор, кстати говоря).
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
15.09.2013, 00:03 #11
Цитата Сообщение от Klotilda Посмотреть сообщение
error C2046: illegal case
Не могу найти ошибку, копировала все. Помогите, пожалуйста!
весь весь?
и ресурсный? и resourse.h?
у тебя не скорее всего не определены макросы IDC_BUTPRESS и прочие
из за этого нелегальный case
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
15.09.2013, 00:22 #12
ValeryS, ну не надо бред писать...
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
15.09.2013, 00:34 #13
Цитата Сообщение от Qwertiy Посмотреть сообщение
ValeryS, ну не надо бред писать...
интересно в чем бред
ошибку читал "illegal case"
перевести ? "незаконный (нелегальный) case"
а что там в case ?
IDC_BUTPRESS
IDC_BUTCLOSE
это что ? идентификаторы кнопок, макросы
которые у студии определяются в файле resourse.h

это вы тут разогнали за скобки да область видимости
где это в ошибке?
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
15.09.2013, 00:39 #14
Цитата Сообщение от ValeryS Посмотреть сообщение
интересно в чем бред
Во-первых, в процитированном сообщении скобка в 31 строке закрывает switch (которая на самом деле непарная), именно поэтому следующий за ней case становится illegal. Но это написано сразу же в следующем посте, т. е. уже не актуально.

Во-вторых, в оставшейся части темы (после удаления данной скобки) обсуждается другая ошибка, а именно "initialization of 'count' is skipped by 'case' label see declaration of 'count'", которая вызвана именно отсутствием пары скобок у кода соответствующей ветви.
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
15.09.2013, 00:45 #15
Цитата Сообщение от Qwertiy Посмотреть сообщение
бсуждается другая ошибка, а именно "initialization of 'count' is skipped by 'case' label see declaration of 'count'", которая вызвана именно отсутствием пары скобок у кода соответствующей ветви.
ну а посоветовать вместо
Цитата Сообщение от Klotilda Посмотреть сообщение
case WM_INITDIALOG:
char COMmas[6], COMnum[3];
написать
C++
1
2
3
case WM_INITDIALOG: 
{
  char COMmas[6], COMnum[3];
не судьба?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 00:45
Привет! Вот еще темы с ответами:

Задача с оператором switch: юзер вводит значение температуры и видит на экране совет о том как одеться - C++
Нужно написать программу с оператором switch в которой юзер вводит значение температуры и видит на экране совет о том как одеться.

Ошибка с оператором - C++
Ребят помогите не могу вдуплить только начал изучать С++ и при написании программы посчета слов в файле выдает ошибку (недопустимый else...

Error C2679. Ошибка с оператором >> - C++
Есть функция DelColl в классе Firm. Вот её кусок: //Удаление сотрудника void Firm::DelColl(int _Quant) { Quant = _Quant; char...

ошибка с оператором множественного выбора - C++
здравствуйте, форумчане. вот код реализации очереди: #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;locale.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.09.2013, 00:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru