![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Constant expression violates subrange bound [D5, Win2k, WinXP]
DelphiDummy © (2002-11-02 13:59:00)В программе есть вот такая строчка:
for i := 0 to 16 do MatrixV[0, i] := i;
При копиляции я получаю следующую ошибку:
[Error] mine.pas(97): Constant expression violates subrange bounds
Вопрос: почему?
P.S. Как только я исправляю MatrixV[0, i] на MatrixV[1, i], вс становится нормально. Но это неправильно.
DelphiDummy (2002-11-02 14:50:00) [1]Извините за глупый вопрос. :) Видимо, за три дня поиска ошибки в программе шифрования я настолько запарился, что даже такие вещи забыл. Юрий, Вы абсолютно правы. Спасибо! :)
Жалко только, что моя программа все еще не работает. Все тот же Access violation at address... :(((
down (2002-11-02 14:47:00) [2]Я имею в виду пост А. Подгорецкого, без обид
down (2002-11-02 14:45:00) [3]Анекдот в тему.
Ламер подходик к хакеру, протягивает исходники:
> - Где у меня ошибка?
> - В ДНК!!!
Юрий Зотов (2002-11-02 14:40:00) [4]Не прав. В корне.
Что указано - то и должно быть. И в TP было так же. Например, что Вы скажете о таком объявлении:
var
MyArray: array[-17..4, boolean, "A".."N"] of integer;
А ведь оно правильное и для Delphi, и для TP.
DelphiDummy (2002-11-02 14:33:00) [5]В голове все правильно. Просто, насколько я знаю, цифры [1..8, 1..16] означают не возможные значения элементов массива, а просто размер, то есть, 8 на 16. По крайней мере, так было в Turbo Pascal`е, насколько я знаю. Или я не прав?
А в Delphi, получается, можно задать и [0..8, 0..16].
Anatoly Podgoretsky (2002-11-02 14:26:00) [6]DelphiDummy (02.11.02 13:59)
Это неправильно только в твоей голове, у тебя явно описано от 1 до 8 и от 1 до 16, так что же ты пытаешься обращаться к нулевому элементу, об этом тебе настойчиво говорит компилятор.
Юрий Зотов (2002-11-02 14:25:00) [7]Кстати, при таком объявлении массива цикл от нуля тоже неверен.
Юрий Зотов (2002-11-02 14:22:00) [8]Элемент - может.
А его индекс - не может.
Вы же сами сказали компилятору, что первый индекс может меняться от 1 до 8. Разве ноль попадает в этот диапазон?
DelphiDummy (2002-11-02 14:18:00) [9]Хорошо. Вот объявление массива MatrixV:
MatrixV: array [1..8, 1..16] of Integer;
Насколько я понимаю, массивы в Delphi объявляются именно так, и цифры 1..8 и 1..16 означают, что массив размера 8 на 16. Правильно?
Вопрос: почему, в таком случае, первый элемент массива не может быть нулем?
Юрий Зотов (2002-11-02 14:14:00) [10]Если бы Вы еще догадались, что для ответа на этот вопрос нужно знать, как объявлено MatrixV...
...то наверняка получили бы ответ. Скорее всего, примерно такой:
"Массив MatrixV объявлен так, что первый индекс его элемента не может быть нулем".