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

Вниз

TObject через ссылку   Найти похожие ветки 

 
aka ©   (2015-03-11 12:58) [0]

SL: TStringList;
................................................................
Push(Pointer(SL.Objects[i]));
//SL.Objects[i] := TObject(3) - напрямую работает

//так - нет
procedure Push(obj: Pointer);
begin
 TObject(obj) := TObject(3);
end;


Почему так происходит?


 
junglecat ©   (2015-03-11 13:21) [1]

procedure Push(var obj: Pointer);


 
aka ©   (2015-03-11 13:28) [2]


> procedure Push(var obj: Pointer)

constant object cannot be passed as var


 
junglecat ©   (2015-03-11 13:53) [3]

P := Pointer(SL.Objects[i]);
Push(P);


 
Плохиш ©   (2015-03-11 13:56) [4]


> aka ©   (11.03.15 13:28) [2]
> > procedure Push(var obj: Pointer)constant object cannot
> be passed as var

не ври, он не на эту строку показывает.

> Push(Pointer(SL.Objects[i]));

компилятор превращает такую конструкцию в константу, т.к. он не в состоянии проследить за полётом больной фантазии дерьмокодера.


 
aka ©   (2015-03-11 14:07) [5]


> Плохиш ©   (11.03.15 13:56) [4]


Спасибо тебе за наука, о всезнающий гуру.

> junglecat ©   (11.03.15 13:53) [3]
>
> P := Pointer(SL.Objects[i]);
> Push(P);


Тут вопрос не в этом... В Objects[i] не присваевается значение через ссылку, как писал в кусочке кода.


> Плохиш ©   (11.03.15 13:56) [4]


А, и не забудь еще написать, что слово "присваевается"  выше написано с ошибкой.


 
icWasya ©   (2015-03-11 14:24) [6]

На проперти нельзя взять ссылку.


 
junglecat ©   (2015-03-11 14:25) [7]

> В Objects[i] не присваевается значение

почему бы не так тогда?
function Push: TObject;
begin
Result := TObject(3);
end;

SL.Objects[i] := Push;


 
Rouse_ ©   (2015-03-11 19:54) [8]

А почему так не должно происходить?
Давай посмотрим на твой код:

procedure Push(obj: Pointer);
begin
TObject(obj) := TObject(3);
end;


Здесь некая переменная obj присваивается тройке.
Ну присвоили и присвоили, а дальше что с ней делать?
Передай ее по ссылке - уже будет цимус, но нет - тыж ее по значению кидаешь.


> Тут вопрос не в этом... В Objects[i] не присваевается значение
> через ссылку, как писал в кусочке кода.

А знаешь почему?
А потому что не читаем мы мануалы - лишнее оно для нас, вот так не хотим писать: Push(@P); - но я знаю, что читать мануалы нужно, важно и тщательно, желательно каждый день перед началом работы программистом (нам же за эту работу деньги платят - за то что мы такие умные :)


 
Dennis I. Komarov ©   (2015-03-11 22:56) [9]

Просветите темного, а адрес "3" это некое волшебство, или результат генерации больного воображения?


 
Rouse_ ©   (2015-03-11 23:02) [10]

Технически все адреса от нуля до 65535 являются областью битых указателей (первая стопка страниц памяти) поэтому, в данном случае не волшебство - а просто чудо какой адрес :)


 
Dennis I. Komarov ©   (2015-03-11 23:11) [11]

Вот она, где утечка памяти)))


 
Германн ©   (2015-03-12 00:34) [12]

А где видно что эта тройка используется именно как адрес?


 
Dennis I. Komarov ©   (2015-03-12 15:37) [13]

Сергей, а какие еще варианты? Поделитесь...


 
Германн ©   (2015-03-12 21:27) [14]


> Dennis I. Komarov ©   (12.03.15 15:37) [13]
>
> Сергей, а какие еще варианты?

Любые. Порядковый номер чего-либо. Количество чего-либо. Номер правильного ответа. И т.д. и т.п.


 
Rouse_ ©   (2015-03-12 21:29) [15]

Давайте "это" рассматривать просто как число :)


 
Германн ©   (2015-03-13 03:09) [16]


> Rouse_ ©   (12.03.15 21:29) [15]
>
> Давайте "это" рассматривать просто как число :)
>

Ну вот опять некоторые запрещают мне "рассматривать это" как мне вздумается. :)
Нет бы сказать что те 4 байта, которые содержатся в свойстве Objects - это просто 4 байта, которые всяк может использовать/трактовать как он хочет.
Единственное замечание. Речь идет о Паскале. А он очень требователен к типам параметров/переменных.


 
Ega23 ©   (2015-03-13 08:13) [17]


> Сергей, а какие еще варианты? Поделитесь...


Пара ID-Caption например. До дженериков - сплошь и рядом.


 
Rouse_ ©   (2015-03-13 12:18) [18]


> Нет бы сказать что те 4 байта, которые содержатся в свойстве
> Objects - это просто 4 байта

А это не 4 байта, это либо 4 либо 8 байт :)


 
Palladin ©   (2015-03-13 16:02) [19]

в свойстве ничего не содержится, его можно считать макроподстановкой


 
Германн ©   (2015-03-14 03:20) [20]

Удалено модератором


 
icWasya ©   (2015-03-16 09:24) [21]

Повторяю ещё раз
брать адрес свойства НЕЛЬЗЯ.


 
Юрий Зотов ©   (2015-03-19 10:11) [22]

icWasya ©   (16.03.15 09:24) [21]

Можно, если это свойство имеет прямой доступ по чтению.


 
Palladin ©   (2015-03-20 12:54) [23]

Но это будет не адрес свойства


 
Юрий Зотов ©   (2015-03-20 18:30) [24]

Это будет адрес поля, естественно. Но получаем мы адрес этого поля именно как адрес свойства.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.055 c
15-1457038707
Германн
2016-03-03 23:58
2017.01.15
Runtime packages


15-1449178204
Юрий
2015-12-04 00:30
2017.01.15
С днем рождения ! 4 декабря 2015 пятница


2-1421840818
i2e
2015-01-21 14:46
2017.01.15
Изображения на SpeedButton


15-1455628706
sniknik
2016-02-16 16:18
2017.01.15
Достали уже менять интерфейс... Мозила


15-1445245394
Kerk
2015-10-19 12:03
2017.01.15
Анатолий Подгорецкий





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский