Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему не работает конструкция case of и как решить проблему? [D7, WinXP]


Страницы:   1 2

Dr.Andrew ©   (2008-04-05 20:15:00) 

Уважаемые Мастера, подскажите почему не работает конструкция и как можно решить проблему, чтобы она заработала правильно:

type
 TSampleType = (stX, stY, stZ);
 TSampleTipes = set of TSampleType;

private
 FSampleType : TSampleTipes;

function GetInfoAboutSampleType() : String;
begin
 case Integer(FSampleType) of
      0 : Result := stX;
      1 : Result := stY;
      2 : Result := stZ;
   0, 1 : Result := stX + stY;
   0, 2 : Result := stX + stZ;
   1, 2 : Result := stY + stZ;
     else Result := stX + stY + stZ;
 end;
end;

Спасибо!


Dummy   (2008-04-06 06:18:00) [21]


> case Integer(FSampleType) of

А что, уже отменили перечисления в Case?


Семеныч   (2008-04-05 21:07:00) [22]

> Dr.Andrew   (05.04.08 20:37) [3]

Предположим, Byte(FSampleType) равно 2. И что делать, если у Вас написано:

      2 : Result := FstZ;
  0, 2 : Result := FstX + FstZ;
  1, 2 : Result := FstY + FstZ;

Вот об этом Вам компилятор и сообщает - "Duplicate case label". Что по-русски означает: "Слушай, а ты сам-то понимаешь, чего ты хочешь?"


Anatoly Podgoretsky   (2008-04-05 20:51:00) [23]

> Denis__  (05.04.2008 20:49:05)  [5]

Ну вообще то не сложно, только вот что автор пытается реализовать, а то я насчитал столько вариантов.
Но все они реализуются в основном через тривиальный IF


Denis__   (2008-04-05 20:49:00) [24]


> Dr.Andrew   (05.04.08 20:37) [3]

А как вы себе это представляете?


Anatoly Podgoretsky   (2008-04-05 20:40:00) [25]

> Dr.Andrew  (05.04.2008 20:15:00)  [0]

Изобрел новый язык.


Dr.Andrew   (2008-04-05 20:37:00) [26]

Извинте небольшое уточнение предыдущего примера:

type
 TSampleType = (stX, stY, stZ);
 TSampleTipes = set of TSampleType;

private
 FSampleType : TSampleTipes;
 FstX; FstY; FstZ : String;

function GetInfoAboutSampleType() : String;
begin
 case Byte(FSampleType) of
      0 : Result := FstX;
      1 : Result := FstY;
      2 : Result := FstZ;
   0, 1 : Result := FstX + FstY;
   0, 2 : Result := FstX + FstZ;
   1, 2 : Result := FstY + FstZ;
     else Result := FstX + FstY + FstZ;
 end;
end;

Теперь компилятор выдает еще одну ошибку:
"[Pascal Error] Unit1.pas(218): E2030 Duplicate case label"

на строчках:
0, 1 : Result := FstX + FstY;
0, 2 : Result := FstX + FstZ;
1, 2 : Result := FstY + FstZ;

Как можно исправить эту проблему.
Спасибо!


Dr.Andrew   (2008-04-05 20:32:00) [27]

Спасибо!
Но компилятор выдает все же еще одну ошибку ошибку:
"[Pascal Error] Unit1.pas(218): E2030 Duplicate case label"

на строчках:
0, 1 : Result := stX + stY;
0, 2 : Result := stX + stZ;
1, 2 : Result := stY + stZ;

Как можно исправить эту проблему.
Спасибо!


Loginov Dmitry   (2008-04-05 20:25:00) [28]

Byte()


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо