const
y0: integer = 20;
//...
y0 := Image1.Height - y0;
//...
[Error] Unit1.pas(103): Left side cannot be assigned to
ыыы... Чего то я вааще в шоке
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Типизированные константы, Дельфи |
sheka |
Сообщение
#1
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
const [Error] Unit1.pas(103): Left side cannot be assigned to ыыы... Чего то я вааще в шоке |
Client |
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
constТочно так же... Константу меняешь |
volvo |
Сообщение
#3
|
Гость |
Это, а {$J+} не пробовали? Или Assignable typed constants в настройках?
|
sheka |
Сообщение
#4
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Оно!
А че эт так? В каких целях эта директива не была включена "автоматически"? Сообщение отредактировано: sheka - |
Unconnected |
Сообщение
#5
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Может, от того, что константы как бы синонимы слова "постоянный"..)
Вообще, никогда не понимал, почему бы не сделать то же самое, только в секции var ) -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#6
|
Гость |
Цитата В каких целях эта директива не была включена "автоматически"? Эта директива вообще существует только в целях совместимости со старыми версиями Паскаля/Дельфи:Цитата In early versions of Delphi and Object Pascal, typed constants were always writeable, corresponding to the {$J+} state. Old source code that uses writeable typed constants must be compiled in the {$J+} state, but for new applications it is recommended that you use initialized variables and compile your code in the {$J-} state. ( отсюда: Writeable typed constants (Delphi) ) |
Гость |
Сообщение
#7
|
Гость |
> Вообще, никогда не понимал, почему бы не сделать то же самое, только в секции var )
1. Чтобы не инициализировать. 2. Чтобы локальная переменная, что внутри функции, инициализировалась только при старте программы и сохраняла значение между вызовами функции. |
sheka |
Сообщение
#8
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Т.е. типизированные константы лучше не использовать..
А как тогда задавать начальные значения? В основной пограмме после бегина? ЗЫ: все равно не могу понять что плохого это может представлять для программы. |
Unconnected |
Сообщение
#9
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
var x:integer=10; , или я что-то не понял?)
Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
sheka |
Сообщение
#10
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Прикол.. ФП тоже разрешает такое делать..Еще на ТП надо попробовать)
|
volvo |
Сообщение
#11
|
Гость |
Можешь не пробовать. Это расширение Object Pascal-я. В Турбо такого не было.
Хочешь ложку дегтя к переменным со стартовым значением? Попробуй инициализировать локальную переменную: procedure p; , как думаешь, что получится? |
sheka |
Сообщение
#12
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Мне кажется, что компилятор скажет обо мне то, что он давно уже думал
Типа что в подпрограмме в описании переменных нельзя инициализировать локальную переменную, т.к. нужно сразу выделять память, хотя... Хотя почему бы это не сделать потом?.. Ну это догадки Сейчас попробую. Добавлено через 4 мин. Точно! Дык я угадал? (хотя, вроде, я где-то это только что прочитал..не помню). И что делать? Константы, хоть и не строго, но запретили. Инициализировать переменную нельзя.. Добавлено через 2 мин. А-а-а! Вроде дошло! Ведь до того, как дойдет время до выполнения процедуры и инициализации переменной, значение 0 надо УЖЕ где-то хранить, да? |
volvo |
Сообщение
#13
|
Гость |
Цитата И что делать? Глобальные переменные инициализировать при описании, локальные - в теле вложенного блока. И не в коем случае не пытаться заменить слово Var на Const только для того, чтобы программа откомпилировалась. Не забывай, типизированная константа сохраняет значение при повторном входе в функцию (за счет того, что хранится не в стеке, а в сегменте данных), переменная - нет.Цитата Хотя почему бы это не сделать потом?.. Не поверишь Из-за того, что язык расширяется, "потому что левая пятка разработчика так захотела". Захотел Борланд сделать константу с описанием типа - сделал (а не было ее в стандартном Паскале, там были только обычные, настоящие, константы). Захотел сделать инициализацию переменной при объявлении - сделал (и этого тоже в стандартном Паскале не было). Вот и наделали. Константа может изменять значение (уже интересно), но переменной значение присвоить нельзя (еще более интересно), если она только не описана глобально.А между тем в более продуманных языках все нормально: procedure p is |
TarasBer |
Сообщение
#14
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> А как тогда задавать начальные значения?
В дельфе меняй типизированные константы и не парься. Они только называются константами, слова другого не подобрали. -------------------- |
Archon |
Сообщение
#15
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Не знал, что в Делфи по-умолчанию нельзя менять типизированные константы. А как тогда статические переменные делать в процедурах? В глобальную область выводить что-ли?
-------------------- Close the World...txeN eht nepO
|
TarasBer |
Сообщение
#16
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Меня другое в дельфе напрягает
-------------------- |
volvo |
Сообщение
#17
|
Гость |
Цитата А как тогда статические переменные делать в процедурах? Делай не в процедурах, а в методах класса. А "статические переменные" теперь - это переменные с классовой областью видимости, которые инициализируются в конструкторе. Ибо Object Pascal, и не фиг (по мнению разработчиков) сидеть на процедурном подходе.А между тем Extended Pascal вполне умеет: program tst; , что выдает: Vlady@V877$ gpc tst.pp |
Текстовая версия | 24.12.2024 1:25 |