|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.04.2008, 21:10 | #1 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Конструкция case of работает некорректно! Как исправить?
Добрый день!
Вот конструкция кода: type TSampleType = (stX, stY, stZ); TSampleTypes = set of TSampleType; private FstX; FstY; FstZ : String; FSampleType : TSampleTypes; procedure Form1.Create(Sender : TObject); begin FSampleType := [stX]; ............................... end; function GetInfoAboutSampleType() : String; begin case Integer(FSampleType) of // компилятор выдает ошибку здесь, когда заменяю Integer(FSampleType) на Byte(FSampleType) ошибки нет 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; Как исправить, чтобы код работал корректно? Все спасибо! |
05.04.2008, 21:23 | #2 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Тип множество не может быть более 255 элементов, поэтому byte подходит, а integer или скажем Word не подойдут.
Кроме того один и тот же указатель не может указывать на разные команды (0,1,2 у вас по два раза). Последний раз редактировалось puporev; 05.04.2008 в 21:26. |
05.04.2008, 21:38 | #3 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Спасибо за ответ, но как тогда прописать оставшиеся строки?
Спасибо за ответ, но как тогда прописать строки иначе:
0, 1 : Result := FstX + FstY; // компилятор выдает ошибку здесь 0, 2 : Result := FstX + FstZ; // компилятор выдает ошибку здесь 1, 2 : Result := FstY + FstZ; // компилятор выдает ошибку здесь мне нужно именно такие значения Result? Спасибо! |
05.04.2008, 23:06 | #4 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Во-первых, строку FstX; FstY; FstZ : String; нужно записать правильно, используя запятые FstX, FstY, FstZ : String;
Во-вторых, раз уж идет работа с множествами, так нужно использовать команды множеств, а не перечислений. Например, так: Код:
|
05.04.2008, 23:40 | #5 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Возможно ли получить все варианты Result функции?
Спасибо за ответ, но возможно ли при конструкции в последнем ответе получить возможные варианты для предложенной к обсуждению мной функции?
|
06.04.2008, 00:08 | #6 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Честно говоря, не уверен, что полностью уловил смысл этой фразы. Могу только сказать, что тот код, который я привел, выдаст любой вариант сочетаний строк в зависимости от значения FSampleType - от пустой строки до суммы всех трех строк FstX, FstY и FstZ.
|
06.04.2008, 00:21 | #7 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Спасибо я все пронял!
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
IdHTTP1 некорректно работает | nike-p | Работа с сетью в Delphi | 9 | 23.07.2008 23:13 |
скажите почему работает некорректно | pimiento | Общие вопросы C/C++ | 6 | 29.05.2008 17:21 |
Задача на case | klop.92 | Помощь студентам | 4 | 28.04.2008 21:17 |
Конструкция файла | SunKnight | Общие вопросы Delphi | 4 | 23.04.2008 08:26 |
Case из STRING. HELP! | Altera | Компоненты Delphi | 12 | 24.02.2008 12:17 |