Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.016 c
15-1452461404
Юрий
2016-01-11 00:30
2017.01.15
С днем рождения ! 11 января 2016 понедельник


1-1340607264
viosvi
2012-06-25 10:54
2017.01.15
ориентация листа OpenOffice


15-1453566333
Fragen
2016-01-23 19:25
2017.01.15
Как пишутся приложения для нахождения оптимального маршрута?


15-1453277297
Dimka Maslov
2016-01-20 11:08
2017.01.15
Немного музыки


4-1279411835
Nikfel
2010-07-18 04:10
2017.01.15
Как изменить цвет выделения в RichEdit?