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

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

Case - Constant expression expected


Ega23 ©   (2007-10-22 13:46:00) 

Туплю: что не так?



const
 lsUnknown     : Integer = 10;
 lsAlarm       : Integer = 20;
 lsReady       : Integer = 30;
 lsBroken      : Integer = 40;
 lsSwitchOFF   : Integer = 50;
 lsGuardON     : Integer = 60;
 lsLocked      : Integer = 70;
 lsCaptured    : Integer = 80;

...............

   Case TLogObjChildItem(ChildList.Items[i]).LogStatCod of
     lsUnknown   : Result := Result + [psUnknown];
     lsAlarm     : Result := Result + [psAlarm];
     lsReady     : Result := Result + [psReady];
     lsBroken    : Result := Result + [psBroken];
     lsSwitchOFF : Result := Result + [psSwitchOFF];
     lsGuardON   : Result := Result + [psGuardON];
     lsLocked    : Result := Result + [psLocked];
     lsCaptured  : Result := Result + [psCaptured];
   end;


Leonid Troyanovsky   (2007-10-22 14:24:00) [1]


> Ega23 ©   (22.10.07 13:46)  

> Туплю: что не так?

Case TLogObjChildItem(ChildList.Items[i]).LogStatCod div 10 - 1 of
 ord(psUnknown): ..

Ну, или константы определить, как lsUnknown = 10*(Ord(psUnknown)+1)

--
Regards, LVT.


Ega23   (2007-10-22 14:16:00) [2]


> Джо ©   (22.10.07 14:14) [11]


Да млжно, уже переделано было. просто начал специально их типизровать, на всякий пожарный. А тут вот такое...


Джо   (2007-10-22 14:14:00) [3]

> [9] Ega23 ©   (22.10.07 14:10)
> результатом выполнения Foo(MyFirstVal) будет 1, а Foo(MySecondVal)
> даст 2.

Дык, а кто мешает сделать Фу таким:
function Foo(Value : Variant) : Integer;
begin
Case VarType(Value) of
 varByte,
 varInteger : Result := 1;
end;
?


Ega23   (2007-10-22 14:11:00) [4]

А для кода данное дело было достаточно критично.


Ega23   (2007-10-22 14:10:00) [5]

Хорошо.
Я почему константы типизировать начал - при переходе с D5 на D7 выяснилось, что при объявлении

const  
 MyFirstVal = 6;
 MySecondVal : Integer =6;

function Foo(Value : Variant) : Integer;
begin
 Case VarType(Value) of
  varByte : Result := 1;
  varInteger : Result := 2;
end;


результатом выполнения Foo(MyFirstVal) будет 1, а Foo(MySecondVal) даст 2.


Reindeer Moss Eater   (2007-10-22 14:03:00) [6]

Значения на рантайме могут меняться


Ega23   (2007-10-22 14:02:00) [7]


> ну как же? assignable можно поменять значение, а в case
> допустимы только "чистые" константы


Нет, в чём разница между assignable typed constant и typed constant?


clickmaker   (2007-10-22 14:00:00) [8]


> чём разница?

ну как же? assignable можно поменять значение, а в case допустимы только "чистые" константы


Ega23   (2007-10-22 13:54:00) [9]


> Типизированные "хаваются"... а вот "assignable" - как-то
> не очень...


Не понял, а в чём разница?


Jump   (2007-10-22 13:52:00) [10]

Типизированные "хаваются"... а вот "assignable" - как-то не очень...


Reindeer Moss Eater   (2007-10-22 13:51:00) [11]

const
lsUnknown     = 10;
...
lsCaptured     = 80;


Ega23   (2007-10-22 13:51:00) [12]

разве в Case типизированные константы не "хаваются"?


Jump   (2007-10-22 13:50:00) [13]

lsUnknown     : Integer = 10;
lsAlarm       : Integer = 20;
lsReady       : Integer = 30;
lsBroken      : Integer = 40;
lsSwitchOFF   : Integer = 50;
lsGuardON     : Integer = 60;
lsLocked      : Integer = 70;
lsCaptured    : Integer = 80;


Integer убери

lsUnknown  = 10;
lsAlarm = 20;
lsReady = 30;
lsBroken = 40;
lsSwitchOFF = 50;
lsGuardON = 60;
lsLocked  = 70;
lsCaptured  = 80;


Или в настройках компилятора попробуй отключить assignable typed constants.


Наверх

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