juice |
Отправлено: 23.02.2005, 12:47 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
почему внутри оператора switch нельзя создавть обьекты, например потоки?
Делаю так:
CODE |
switch (QueryThread->thrdresult)
{
case 0 :
...
case 1 :
tmrProcess->Enabled = false;
tmrProcess1->Enabled = true;
pbProcess->Position = 100;
TQueryThread *QueryThread2 = new TQueryThread(true);
QueryThread = QueryThread2;
QueryThread->thrdtask = 2;
QueryThread->OnTerminate = QueryTerminate;
QueryThread->FreeOnTerminate = true;
QueryThread->Resume();
break;
case 2 : // вот тут ошибка
|
[C++ Error] fm_main.cpp(47): E2126 Case bypasses initialization of a local variable |
|
Георгий |
Отправлено: 23.02.2005, 15:29 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
необходимо объявить логический блок (не помню как он по стандарту называется). т.е. обрамить тело case 1: в фигурные скобки:CODE | switch(..)
{case 1:
{
...};
break;
case 2:
{...};
break;
}; |
а уже внутри фигурных, могут быть свои локальные переменные |
|
juice |
Отправлено: 23.02.2005, 16:39 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Спасибо, работает. Интересно в чем тут смысл |
|
Treumer |
Отправлено: 24.02.2005, 12:18 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
QUOTE (juice @ 23/02/2005, 16:39) | Спасибо, работает. Интересно в чем тут смысл |
Смысл ясен: компилятор, если
TQueryThread *QueryThread2 не описана в фигруных скобках, считает
переменной видимой во всей функции, а при попадении на case 2 она компилятором не будет создана, хотя и должна быть "видима" в этом участке кода. Когад все в скобках — "видимость" переменной ими и определяется.
А вообще, кажется мне, что если сделать так:
CODE |
case 1 :
tmrProcess->Enabled = false;
tmrProcess1->Enabled = true;
pbProcess->Position = 100;
QueryThread = new TQueryThread(true);
QueryThread->thrdtask = 2;
QueryThread->OnTerminate = QueryTerminate;
QueryThread->FreeOnTerminate = true;
QueryThread->Resume();
break;
|
То и никаких доп. скобок бы не понадобилось. |
|
Deem |
Отправлено: 25.02.2005, 13:52 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Между оператором goto и меткой нельзя описывать переменные. Правда, со скобками не пробовал. По той же причине: не гарантированно создание переменной, к которой могут обратиься другие. Я описываю в начале функции, и все.
Отредактировано Deem — 25/02/2005, 13:55
|
|