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

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

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

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

13.09.2013, 13:54. Просмотров 1174. Ответов 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
Не могу найти ошибку, копировала все. Помогите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 13:54     Ошибка с оператором switch
Посмотрите здесь:

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

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

Работа с оператором 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 в...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
15.09.2013, 13:33     Ошибка с оператором switch #21
Цитата Сообщение от Qwertiy Посмотреть сообщение
Я говорил о Си++.
Только ты прокомментировал моё сообщение, которое мало того, что было в другой теме, но относилось именно к языку C (моя вина, я этого в той теме сразу явно не указал).

Цитата Сообщение от Qwertiy Посмотреть сообщение
Тогда почему такой код компилируется и работает?
А у меня — нет:
Ошибка с оператором switch

Опять же, все подробности — в стандарте языка (C).
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
15.09.2013, 13:46     Ошибка с оператором switch #22
Цитата Сообщение от Nameless One Посмотреть сообщение
Только ты прокомментировал моё сообщение, которое ... было в другой теме
Потому что на неё дали ссылку...

Цитата Сообщение от Nameless One Посмотреть сообщение
но относилось именно к языку C (моя вина, я этого в той теме сразу явно не указал).
Интересно, что в той теме (по крайней мере на указанной странице) я вообще не вижу указаний на Си. А вот обсуждаемый код помечен маркером "Код C++".

Цитата Сообщение от Nameless One Посмотреть сообщение
А у меня — нет:
Я же написал, что говорю о Си++. На Си никакой код с объявлением переменных не в начале блока у меня не компилируется.

Цитата Сообщение от Nameless One Посмотреть сообщение
Опять же, все подробности — в стандарте языка (C).
Сферический стандарт в вакууме - это хорошо, но немного не то, когда нужно чтобы код реально компилировался

Добавлено через 2 минуты
PS: Похоже, четвёртую страницу там не посмотрел... Но как я уже говорил, на Си VS подобный код не компилирует принципиально.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
15.09.2013, 13:58     Ошибка с оператором switch #23
Цитата Сообщение от Qwertiy Посмотреть сообщение
А вот обсуждаемый код помечен маркером "Код C++".
Дело в том, что большая часть пользователей этого форума путает теги C, CPP, CSHARP, CPPQT, а также разделы, в которых создаются темы, поэтому часто приходится догадываться о происхождении кода по самому коду и/или по контексту. А код в стартовом сообщении именно что сишный (почти стандартный), несмотря на теги, в том смысле, что никаких плюсовых особенностей в нём нет.

Цитата Сообщение от Qwertiy Посмотреть сообщение
PS: Похоже, четвёртую страницу там не посмотрел...
Это потому, что четвёртая страница появилась только сегодня.

Добавлено через 4 минуты
Цитата Сообщение от Qwertiy Посмотреть сообщение
Сферический стандарт в вакууме - это хорошо
Это не то что хорошо, это просто очень хорошо, и стандарта должен придерживаться каждый программист, который хочет писать кроссплатформенный код. На особенности конкретного компилятора рассчитывать в данном случае — значит губить всю кроссплатформенность на корню.
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
15.09.2013, 15:41     Ошибка с оператором switch #24
Цитата Сообщение от Nameless One Посмотреть сообщение
На особенности конкретного компилятора рассчитывать в данном случае — значит губить всю кроссплатформенность на корню.
Эм.. В случае наличия скобок код компилируется везде и на обоих языках. В случае наличия точки с запятой в VS код не компилируется ни на одном языке. Даже если это соответствует стандарту, как раз использование этой фичи делает код непереносимым, а не наоборот. Известно, что в си переменные должны быть объявлены в начале блока, иначе код не компилируется кучей компиляторов. Не знаю, что в этом плане в стандарте, но по факту всё именно так.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
15.09.2013, 15:46     Ошибка с оператором switch #25
Цитата Сообщение от Qwertiy Посмотреть сообщение
В случае наличия скобок код компилируется везде и на обоих языках.
Я говорил не про конкретный случай.

Цитата Сообщение от Qwertiy Посмотреть сообщение
Даже если это соответствует стандарту, как раз использование этой фичи делает код непереносимым, а не наоборот.
Под переносимостью обычно понимают переносимость между разными платформами в пределах одного языка, а не переносимость C - C++, которая никому, в принципе, и не нужна.

Цитата Сообщение от Qwertiy Посмотреть сообщение
Известно, что в си переменные должны быть объявлены в начале блока
Уже 14 лет, как не должны быть.
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
15.09.2013, 15:57     Ошибка с оператором switch #26
Цитата Сообщение от Nameless One Посмотреть сообщение
Под переносимостью обычно понимают переносимость между разными платформами в пределах одного языка
Ну если в GCC компилируется на Си, а в VS не компилируется, то при чём тут между языками?

Цитата Сообщение от Nameless One Посмотреть сообщение
Уже 14 лет, как не должны быть.
VS2010 не компилирует этот код:
C
1
2
3
4
5
6
7
int main(void)
{
  ;
  int x;
 
  return 0;
}
Ошибка 1 error C2143: синтаксическая ошибка: отсутствие ";" перед "тип"
а без пустого оператора всё нормально.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
15.09.2013, 16:02     Ошибка с оператором switch #27
Цитата Сообщение от Qwertiy Посмотреть сообщение
VS2010 не компилирует этот код:
Цитата Сообщение от Qwertiy Посмотреть сообщение
а в VS не компилируется, то при чём тут между языками?
А кто говорил, что в VS есть нормальная поддержка C(99)? Я такого не утверждал.

Если я не ошибаюсь, где-то в сети есть официальное подтверждение того, что Microsoft не заинтересован в поддержке языка C, и планирует поддерживать только C++ (с бекпортом отдельных фич в их реализацию C90).
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
15.09.2013, 16:06     Ошибка с оператором switch #28
Цитата Сообщение от Nameless One Посмотреть сообщение
А кто говорил, что в VS есть нормальная поддержка C(99)? Я такого не утверждал.
Ну так я и говорю, что "сферический стандарт в вакууме" Это как раз и есть вопрос переносимости. Зачем призывать к использованию фич, которые делают код непереносимым? Даже если по стандарту они должны работать уже 14 лет...

Цитата Сообщение от Nameless One Посмотреть сообщение
и планирует поддерживать только C++ (с бекпортом отдельных фич в их сишную реализацию C90).
На Си++ приведённый код компилируется нормально.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
15.09.2013, 16:11     Ошибка с оператором switch #29
Цитата Сообщение от Qwertiy Посмотреть сообщение
Ну так я и говорю, что "сферический стандарт в вакууме" Это как раз и есть вопрос переносимости. Зачем призывать к использованию фич, которые делают код непереносимым? Даже если по стандарту они должны работать уже 14 лет...
Цитата Сообщение от Qwertiy Посмотреть сообщение
На Си++ приведённый код компилируется нормально.
Я заранее извиняюсь, если пошатну чью-нибудь психику следующим высказыванием, но предыдущий пример (и твоё сообщение) говорит не о том, что приведенный код некроссплатформенный (или непереносимый) — потому что это не так, а о том, что поддержка языка C у MS VS говняная. Я не пытаюсь оскорбить при этом сам компилятор VS и его разработчиков, потому что они сами не хотят его поддерживать.

Цитата Сообщение от Qwertiy Посмотреть сообщение
На Си++ приведённый код компилируется нормально.
Читать до просветления:
Цитата Сообщение от Nameless One Посмотреть сообщение
переносимость C - C++,[...] в принципе, и не нужна.
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
15.09.2013, 23:24     Ошибка с оператором switch #30
Цитата Сообщение от Nameless One Посмотреть сообщение
говорит не о том, что приведенный код некроссплатформенный (или непереносимый) — потому что это не так, а о том, что поддержка языка C у MS VS говняная
А в чём же тогда заключается переносимость, как не в возможности скомпилировать разными компиляторами?

Цитата Сообщение от Nameless One Посмотреть сообщение
Читать до просветления:
Моя фраза относилось к
Цитата Сообщение от Nameless One Посмотреть сообщение
с бекпортом отдельных фич в их реализацию C90
В смысле что можно было бы и перенести в Си...
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
16.09.2013, 00:44     Ошибка с оператором switch #31
Цитата Сообщение от Qwertiy Посмотреть сообщение
А в чём же тогда заключается переносимость, как не в возможности скомпилировать разными компиляторами?
Уже писал:
Цитата Сообщение от Nameless One Посмотреть сообщение
Под переносимостью обычно понимают переносимость между разными платформами в пределах одного языка
И ещё:
Цитата Сообщение от Qwertiy Посмотреть сообщение
как не в возможности скомпилировать разными компиляторами?
… разными компиляторами ОДНОГО языка. А то, что ты понимаешь под переносимостью — это как если бы одну и ту же программу, к примеру, можно было скомпилировать с помощью компиляторов C++ и C#.
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
16.09.2013, 00:50     Ошибка с оператором switch #32
Цитата Сообщение от Nameless One Посмотреть сообщение
А то, что ты понимаешь под переносимостью — это как если бы одну и ту же программу, к примеру, можно было скомпилировать с помощью компиляторов C++ и C#.
Нет. Под переносимостью я понимаю (в данном случае), что её можно скомпилировать и в GCC, и в VS на одном и том же языке (не важно каком именно - Си или Си++, но одном и том же для обоих компиляторов).
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
16.09.2013, 01:32     Ошибка с оператором switch #33
Цитата Сообщение от Qwertiy Посмотреть сообщение
Под переносимостью я понимаю (в данном случае), что её можно скомпилировать и в GCC, и в VS на одном и том же языке
Это не переносимость, это всего лишь значит, что программа написана на том подмножестве C, который понимает VS.

Переносимость же определяется стандартами языка, а не степенью поддержки этих стандартов конкретным компилятором. Точно так же я могу сказать, что скомпилированная на VS программа, написанная на C++, непереносима, т.к. она не скомпилируется на Turbo C++. Но ведь это не так, просто Turbo C++ не поддерживает современные стандарты.

PS. Кстати, а почему ты ограничиваешься только двумя компиляторами?
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
16.09.2013, 01:51     Ошибка с оператором switch #34
Цитата Сообщение от Nameless One Посмотреть сообщение
Это не переносимость, это всего лишь значит, что программа написана на том подмножестве C, который понимает VS.
Ну, есть ещё некоторые фичи VS, которые не поймёт GCC

Цитата Сообщение от Nameless One Посмотреть сообщение
Точно так же я могу сказать, что скомпилированная на VS программа, написанная на C++, непереносима, т.к. она не скомпилируется на Turbo C++.
Turbo C был давно и устарел. А я говорю о текущей версии VS, а не об устаревшей.

Цитата Сообщение от Nameless One Посмотреть сообщение
PS. Кстати, а почему ты ограничиваешься только двумя компиляторами?
VS и GCC - самые популярные компиляторы, насколько я представляю. А какие ещё стоит рассматривать?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
16.09.2013, 02:04     Ошибка с оператором switch #35
Цитата Сообщение от Qwertiy Посмотреть сообщение
Ну, есть ещё некоторые фичи VS, которые не поймёт GCC
Только эти фичи будут нестандартными расширениями компилятора VS, непереносимыми априори. Я же говорил только о коде, который соответствует стандарту.

Цитата Сообщение от Qwertiy Посмотреть сообщение
А я говорю о текущей версии VS, а не об устаревшей.
Можешь считать, что в текущих версиях VS поддержка C «устарела», так что аналогия имеет право на жизнь.

Цитата Сообщение от Qwertiy Посмотреть сообщение
А какие ещё стоит рассматривать?
Как минимум Clang.

Добавлено через 9 минут
Цитата Сообщение от Nameless One Посмотреть сообщение
Только эти фичи будут нестандартными расширениями компилятора VS
Кстати, у GCC тоже есть куча именно языковых расширений, которые позволяют писать хоть и непереносимые, но такие вещи как libCello (компилируется GCC и Clang).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2013, 12:47     Ошибка с оператором switch
Еще ссылки по теме:

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

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

Где ошибка в switch - C++
Ошибка в 35 строке, и как ввести побочные действия? #include &lt;iostream&gt; using namespace std; int main() { ...

Ошибка кода (switch) - C++
Помогите пожалуйста. void __fastcall TForm1::Button1Click(TObject *Sender) { float x, y, k, r, s; int n, i; ...

Switch где ошибка? - C++
Ошибки не выдает, но и не запускается. Ошибку найти не могу Т_Т Help) #include &lt;iostream&gt; using namespace std; int mine() { ...


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

Или воспользуйтесь поиском по форуму:
Klotilda
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 100
18.09.2013, 12:47  [ТС]     Ошибка с оператором switch #36
большое спасибо за статью
Yandex
Объявления
18.09.2013, 12:47     Ошибка с оператором switch
Ответ Создать тему
Опции темы

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