... (пытаюсь воспроизвести)
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
|
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Похожая ситуация.
Анекдот писал(а): Звонок в автосервис:- Здравствуйте, меня зовут Света, и у меня розовый "ниссан". Мне что-то надо отремонтировать! - Что именно? - (Удивленно) Как ?! - Вы не знаете, что ремонтируют в розовом "ниссане" ?!? |
|||
карма: 25 |
|
Ответов: 1429
Рейтинг: 50
|
|||
Tad, извините, вот:
FTCG code_25411.txt Delphi code_25412.txt Ошибок компиляции нет, и программа работает, но данных нет на выходе точки. |
|||
карма: 0 |
| ||
файлы: 2 | code_25411.txt [772B] [195], code_25412.txt [2.4KB] [133] |
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): Ошибок компиляции нет, и программа работает, но данных нет на выходе точки.Пришлось немного изучить FTCG, создать пару новых компонент, воспроизвести Вашу ситуацию и выявить, что Вы у себя объявили переменную a не указав кодогенератору (не путать с компилятором) явно её тип. Если сделать второй строчкой вашего компонента
|
|||
карма: 1 |
| ||
Голосовали: | login |
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0 писал(а): Пришлось немного изучить FTCG, создать пару новых компонент, воспроизвести Вашу ситуацию и выявить![]() Кодогенератор мне часто ругается "неопределенный идентификатор int", когда я ставлю тип переменной, он меня этим остал, и я стал невсегда ставить типы переменных. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): "неопределенный идентификатор int"Именно на объявления через lang() ![]() |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, нет, именно на другие, внутренние, а на lang как раз и небыло.
------------ Дoбавленo в 23.08: [offtop]Вложенность массива, для моей проги вышла, приличная ![]() Уровни массива, в квадратных скобках, array[0,0,0,...n] такие: 1. проэкт 2. номер свойства 3. Трек 4. номер свойства 5. Item 6. номер свойства 7. нота 8. номер свойства ![]() [/offtop] |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): на lang как раз и небыло.А на lang как раз тип объявлять жизненно важно, т.к. по нему и только по нему кодогенератор решает, какой код создавать для конкретно этой переменной при выдаче её "наружу" (личные наблюдения). Иногда даже ставит конвертацию типов сам. Если не укажете, либо укажете неправильно, начинают вылезать проблемы вроде Вашей. Ещё я заметил, что, похоже, тип можно динамически менять и про это ни слова в документации. Документация вообще больное место. |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
[offtop]
1nd1g0 писал(а): тип можно динамически менять1nd1g0 писал(а): Документация Я создал html страницу, на которую скопировал всю информацию по FTCG какая у меня есть. И ищу поиском по странице, очень удобно.[/offtop] ------------ Дoбавленo в 01.13: Коллеги, я случайно онаружил причину, по которой не работало в IC: ar2 := ar1 под делфи и глючило под FPC. Вот нерабочая:
Вот рабочая в обоих компиляторах:
А у Tad не работал его универсальный вариант, потому, что под FPC не работает функция Copy(ar1, 0, Length(ar1)) При этом ar2 := ar1 - работает. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): тип переменной один на двоихВероятно, после такого объявления и компиляции используются одни и те же процедуры инициализации и обработки. При раздельном объявлении они считаются разными, потенциально взаимно не совместимыми типами. ------------ Дoбавленo в 01.30: login писал(а): ar2 := ar1А Вы попробуйте теперь начать изменять первый массив, если второй тоже начнёт меняться, хотя в него ничего не копировали, значит у Вас просто сравнялись указатели(а не сами массивы) и придётся попробовать приписать ^ к именам массивов при операциях. |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, Да, меняется и второй. А как делать чтобы не менялось?
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): как делать чтобы не менялось?Да похоже, что в этой версии компилятора без Copy не обойтись. По крайней мере, разыменование ^ нам тут не помогает. Если бы я не сомневался, что тут массивы занимают непрерывные области памяти, я бы поступил как в машинных кодах - выяснил указатели на массивы, их границы, и скопировал блок памяти. Но тут массивы реализованы в объектной модели и могут содержать всевозможные типы, а потому с ними желательно работать средствами самой среды. |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
[flood]
1nd1g0 писал(а): При раздельном объявлении они считаются разными, потенциально взаимно не совместимыми типами.![]() ![]() |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login, с запретом прямого присвоения массивов их можно понять: не известно какой размерности будут (динамические!) один и второй массив на момент копирования, даже если объявлены похоже. Каждый подмассив, в свою очередь, тоже может менять размерность. Легко такое не скопируешь, это же компилируемый язык, а не интерпретируемый скрипт, ситуации неопределённости возлагаются на плечи программиста. А вот на кой ляд разрешать взаимное присвоение указателей при работе с массивами - действительно тайна великая есть(видать, массивы тут расцениваются как типизированные указатели). Самое интересное, после "потери" адреса своего старого содержимого, если его никуда не сохранили, массиву прежние значения будет, похоже, не вернуть. И это ещё большой вопрос, очищается ли область памяти после такого присвоения, или так и остаётся "висеть", неучтённая. Можно интереса ради попробовать поиграться с указателями, по идее.
|
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, согласен.
Во флуде я написал именно про разницу в интерфейсе присвоения одинакового типа группой, или каждой переменной отдельно. Это на мой взгляд колумбийский косяк. [flood]А к стати, по этой модели пишется музыка ![]() |
|||
карма: 0 |
|