Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-33959
DN
2002-11-01 11:29
2002.11.11
---|Ветка была без названия|---


14-34248
Карлсон
2002-10-23 23:18
2002.11.11
ну ваще!


14-34183
Осирис
2002-09-30 18:23
2002.11.11
Охота началась....


1-34076
MegaVolt
2002-10-30 17:26
2002.11.11
Как извлекать форму из репозитария и где хранятся её исходники?


1-34047
Telic
2002-10-30 12:03
2002.11.11
Значение посередине графика





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский