1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| TarasBer |
31.01.2011 15:09
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
И что делать с этим raised CONSTRAINT_ERROR : test.adb:24 discriminant check failed ? В процедуре через out-параметр присвоилось нормально, однако. А вот t3'access.all := t1'access.all; - ошибка дискриминанта Почему прямо присваивать можно, а через указатель - нельзя? Так и написано в стандарте? Если поставить точку останова, а потом добить пустых строчек так, чтобы эта точка оказалась на строчке, на которой ничего нет, а потом отрубить отладчик, пересобрать код, перезапустить отладчик, то эту точку останова уже не убрать. Дизассмеблер не взлетел: Couldn't get assembly code. Кстати, смысла на ограничения параметров в функциях нет никакого. Избавление от побочных эффектов? Ха, толку, если можно писать во внешние переменные. Зато костыль с access получится на славу по уродливости. Зачем вообще языки Паскалевого семейства делают ненужное разделение на процедуры и функции? Да, концепция красивая, типа процедура - то, что выполняется, функция - то, что возвращает значение, но в условиях реальности она только мешает. Сообщение отредактировано: TarasBer - 31.01.2011 15:11 -------------------- |
![]() ![]() |
| volvo |
2.02.2011 12:35
Сообщение
#2
|
|
Гость |
Цитата А если я не знаю (на этапе компиляции), какое именно d мне понадобится? Пожалуйста. Только тебе это не поможет - ты все равно получишь Constraint_Error. Выбор у тебя невелик. Либо отказаться от использования discriminant records и решить задачу по-другому, либо воспользоваться procedure вместо function (это тоже не будет работать со всеми вариантами, см. ниже), либо отключать проверку дискриминанта. Ну, и четвертый вариант: ждать выхода компилятора, полностью поддерживающего Ada 2012.<...> Нет, спасибо. Ада тебе не позволит никакими ухищрениями обойти контроль дискриминанта в любом объекте, расположенном в куче, либо вообще в любом объекте, если ты обращаешься к нему через ссылку. Обрати внимание: procedure Main is Контроль можно только отключить. Хочешь - отключай (если уверен, что это не приведет в дальнейшем к проблемам). Цитата Кстати, как сдвинуть выделенный текст вправо-влево (аналог ctrl+k+i, ctrl+k+u)? Без понятия. Не требовалось ни разу, у меня на сохранение файла повешено его переформатирование, каждый раз когда я жму Ctrl+S, исходник приводится к тому виду, который я установил в "Pretty Printer" в настройках проекта. Потом при проверке стиля проблем гораздо меньше.Можно сделать такое форматирование вручную, Edit -> Pretty Print. |
TarasBer Дискриминантные записи - GNAT 31.01.2011 15:09
volvo Думать, прежде, чем писать такие вещи. Ибо компиля... 31.01.2011 17:24
TarasBer > Компилятор сначала проверит, а имеешь ли ты п... 31.01.2011 18:11
volvo Значит, тебе не нужна Ада. Используй С и действуй ... 31.01.2011 20:13
-TarasBer- Мне всего-то надо создать в куче сущность с дискри... 31.01.2011 20:49
volvo Я сказал на операцию присваивания, а не на операци... 1.02.2011 13:28
TarasBer > Затем, чтобы контролировать, имеешь ли ты в д... 1.02.2011 14:15
TarasBer > Либо отказаться от использования discriminant... 2.02.2011 13:03
volvo В Стандарте? Где именно, можно уточнить? Ибо это н... 2.02.2011 17:05
TarasBer > В Стандарте? Где именно, можно уточнить? Ибо ... 3.02.2011 13:33
volvo Оно уже сейчас есть в языке. Но только в А2005, а ... 3.02.2011 14:58
TarasBer > С точки зрения компилятора эти 2 типа записи ... 3.02.2011 15:22
volvo Я не про Модулу в данном случае. Я про тот проект,... 3.02.2011 17:52
-TarasBer- > Я не про Модулу в данном случае. Я про тот пр... 3.02.2011 19:48
volvo Не знаю, было ли у того проекта отдельное название... 3.02.2011 20:55
-TarasBer- > Но Вирт продвигал там идеи Алгол-W
Почитал в... 3.02.2011 21:19
volvo Что именно ты пробовал сделать, можно посмотреть? ... 3.02.2011 21:38
TarasBer Ну классический пример (из http://8vmr.livejournal... 4.02.2011 10:35
volvo Стоп. Ада такого не позволит по одной простой прич... 4.02.2011 13:30
TarasBer > Только у меня возникает вопрос: а почему надо... 4.02.2011 13:39
volvo Лямбды нужны там, где нет замыканий. В С++ их нет ... 4.02.2011 14:15![]() ![]() |
|
Текстовая версия | 15.11.2025 16:43 |