![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему не работает конструкция case of и как решить проблему? [D7, WinXP]
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()