Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.11;
Скачать: CL | DM;

Вниз

Constant expression violates subrange bound   Найти похожие ветки 

 
DelphiDummy   (2002-11-02 13:59) [0]

В программе есть вот такая строчка:

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], вс становится нормально. Но это неправильно.


 
Юрий Зотов ©   (2002-11-02 14:14) [1]

Если бы Вы еще догадались, что для ответа на этот вопрос нужно знать, как объявлено MatrixV...

...то наверняка получили бы ответ. Скорее всего, примерно такой:
"Массив MatrixV объявлен так, что первый индекс его элемента не может быть нулем".


 
DelphiDummy   (2002-11-02 14:18) [2]

Хорошо. Вот объявление массива MatrixV:

MatrixV: array [1..8, 1..16] of Integer;

Насколько я понимаю, массивы в Delphi объявляются именно так, и цифры 1..8 и 1..16 означают, что массив размера 8 на 16. Правильно?

Вопрос: почему, в таком случае, первый элемент массива не может быть нулем?


 
Юрий Зотов ©   (2002-11-02 14:22) [3]

Элемент - может.
А его индекс - не может.

Вы же сами сказали компилятору, что первый индекс может меняться от 1 до 8. Разве ноль попадает в этот диапазон?


 
Юрий Зотов ©   (2002-11-02 14:25) [4]

Кстати, при таком объявлении массива цикл от нуля тоже неверен.


 
Anatoly Podgoretsky ©   (2002-11-02 14:26) [5]

DelphiDummy (02.11.02 13:59)
Это неправильно только в твоей голове, у тебя явно описано от 1 до 8 и от 1 до 16, так что же ты пытаешься обращаться к нулевому элементу, об этом тебе настойчиво говорит компилятор.


 
DelphiDummy   (2002-11-02 14:33) [6]

В голове все правильно. Просто, насколько я знаю, цифры [1..8, 1..16] означают не возможные значения элементов массива, а просто размер, то есть, 8 на 16. По крайней мере, так было в Turbo Pascal`е, насколько я знаю. Или я не прав?

А в Delphi, получается, можно задать и [0..8, 0..16].


 
Юрий Зотов ©   (2002-11-02 14:40) [7]

Не прав. В корне.

Что указано - то и должно быть. И в TP было так же. Например, что Вы скажете о таком объявлении:

var
MyArray: array[-17..4, boolean, "A".."N"] of integer;

А ведь оно правильное и для Delphi, и для TP.


 
down   (2002-11-02 14:45) [8]

Анекдот в тему.
Ламер подходик к хакеру, протягивает исходники:
> - Где у меня ошибка?
> - В ДНК!!!


 
down   (2002-11-02 14:47) [9]

Я имею в виду пост А. Подгорецкого, без обид


 
DelphiDummy   (2002-11-02 14:50) [10]

Извините за глупый вопрос. :) Видимо, за три дня поиска ошибки в программе шифрования я настолько запарился, что даже такие вещи забыл. Юрий, Вы абсолютно правы. Спасибо! :)

Жалко только, что моя программа все еще не работает. Все тот же Access violation at address... :(((



Страницы: 1 вся ветка

Текущий архив: 2002.11.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
14-34177
MBo
2002-10-21 12:55
2002.11.11
Длинный гудок на маме - что значит?


3-33905
NeyroSpace
2002-10-21 17:16
2002.11.11
Как сконвертировать VARCHAR(х) в Blob?


8-34124
Vladimir Prokofiev
2002-07-17 17:28
2002.11.11
Что за зверь TCanvas3D в Delphi 5


3-33892
donets
2002-10-22 15:29
2002.11.11
Как подружить сканер штрих-кода с базой данных?


8-34126
pavit
2002-07-19 09:02
2002.11.11
Нужен пример для начинающего.