Problem z const'ami

0

hej,
da się zmusić kompilator do przyjęcia tego ? Chodzi mu że nie mogę do tablicy włożyć zbiorów zdefiniowane przez wcześniejsze const'y.

type
  TItemAvg = (iaDay, iaWeek, iaMonth, iaCut, iaJuice, iaWide);
  TAvgSet = set of TItemAvg;

const
  TAvg1: TAvgSet = [iaDay, iaWide];
  TAvg2: TAvgSet = [iaDay, iaWeek, iaMonth, iaCut, iaWide];
  TAvg3: TAvgSet = [iaDay, iaWeek, iaMonth, iaJuice, iaWide];

  TAvgTab: array[1..6] of TAvgSet = (TAvg1, TAvg2, TAvg1, TAvg1, TAvg3, TAvg3);

Error to:
Constant expression expected

0

widocznie delphi nie traktuje tego jako stalej.
daj tak:

  TAvgTab: array[1..6] of TAvgSet = ([iaDay, iaWide],                           //TAvg1
                                     [iaDay, iaWeek, iaMonth, iaCut, iaWide],   //TAvg2
                                     [iaDay, iaWide],                           //TAvg1
                                     [iaDay, iaWide],                           //TAvg1
                                     [iaDay, iaWeek, iaMonth, iaJuice, iaWide], //TAvg3
                                     [iaDay, iaWeek, iaMonth, iaJuice, iaWide]);//TAvg3
0

A nie może być tak?

type
  TItemAvg = (iaDay, iaWeek, iaMonth, iaCut, iaJuice, iaWide);
  TAvgSet = set of TItemAvg;

const
  TAvg1 = [iaDay, iaWide];
  TAvg2 = [iaDay, iaWeek, iaMonth, iaCut, iaWide];
  TAvg3 = [iaDay, iaWeek, iaMonth, iaJuice, iaWide];

  TAvgTab: array[1..6] of TAvgSet = (TAvg1, TAvg2, TAvg1, TAvg1, TAvg3, TAvg3);
 
0

widocznie delphi nie traktuje tego jako stalej.
Bo to nie jest stała.

Jeśli w const podajemy nazwę typu, to jest to deklaracja zmiennej wraz z inicjalizacją wartości. Czyli

    const i:integer = 5;

jest równoważne z

    var i:integer = 5;

czyli jest to zmienna.

To taka zmyłka.

0

Nie do końca zmienna, bo nie można modyfikować jej wartości, zmienna zainicjowana by była gdyby było tak:

const
  {$J+}
  i: Integer = 5;
  {$J-}
0
kAzek napisał(a)

Nie do końca zmienna, bo nie można modyfikować jej wartości, zmienna zainicjowana by była gdyby było tak:
Czyżby coś się zmieniło? w starszych Delphi była to po prostu zmienna.

0

Do zmiennej (jak sama nazwa wskazuje) można przypisać jakąś wartość a tak się nie da.
Po prostu bez tych dyrektyw kompilator nie "łyknie" np.:
i:= 1;

1 użytkowników online, w tym zalogowanych: 0, gości: 1