Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
1-34101
Sergy
2002-10-31 15:22
2002.11.11
Динамический массив. Найти индекс по значению


3-33914
Tornado
2002-10-23 08:59
2002.11.11
ADOTable.Filter ?


1-33931
Юра
2002-10-31 23:11
2002.11.11
Как запустить программу и открыть файл, нажав Enter на файле?


4-34318
wonder_boy
2002-09-27 12:51
2002.11.11
Блокировка доступа к процессу


1-34044
X-shadow
2002-10-30 17:51
2002.11.11
ПИСЬМО!!!




   Наверх