Главная страница
    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-1448011257
Сергей Суровцев
2015-11-20 12:20
2017.01.15
Вот и про нас вспомнили


2-1421304666
chron22
2015-01-15 09:51
2017.01.15
динамический sql в компонентах


15-1450349876
DayGaykin
2015-12-17 13:57
2017.01.15
TCP прокси


3-1308557586
MacroDenS
2011-06-20 12:13
2017.01.15
ADO + Excel


15-1447932039
DayGaykin
2015-11-19 14:20
2017.01.15
Умножение и сложение UInt64 с переполнением.





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