Low() & High() w case of

0

mam kod

var TAB:array of Integer;

case I of
 Low(TAB): Color:=$0000FF;
 High(TAB): Color:=$008000;
 else Color:=$FF0000;
end;

Jak High jest zakomentowane, ładnie się kompiluje, ale z High już kompilator nie chce opchnąć, czemu je tego nie pojmuję, nie wiem może coś źle robię?

1

Musisz nadać tablicy rozmiar przez np.
SetLength(TAB,7);
od teraz dynamiczna tablica będzie miała 7 elementów od 0 do 6

0
hzmzp napisał(a)

Jak High jest zakomentowane, ładnie się kompiluje, ale z High już kompilator nie chce opchnąć, czemu je tego nie pojmuję, nie wiem może coś źle robię?

Tak, nie czytasz kursów, błędów kompilacji, nie szukasz w Google; To podstawy, z którymi każdy powinien się zapoznać; Więc następnym razem zanim zapytasz o podstawy - poczytaj, poszukaj informacji w sieci;

@szopenfx podał rozwiązanie - zawsze ustala się na początku rozmiar dynamicznej macierzy, dopiero potem się na niej operuje; Jeśli tego nie zrobisz - dostaniesz na pewno komunikat albo podpowiedzi, albo ostrzeżenia, albo błędu; Czytaj je więc i stosuj się do nich.

6

Nie odpowiedzieliście mu na pytanie.
brak setlength jest prawdopodobnie skutkiem wyciętego fragmentu kodu, a nie błędu w kodzie.

low(TAB) przechodzi, bo kompilator wie że liczba ta jest stałą czasu kompilacji, i wynosi zero.
high(TAB) w przypadku tablicy dynamicznej nie przechodzi, bo liczba ta jest zmienną zależną od chwilowej długości tablicy, a case wymaga stałych.

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