Форум: "Начинающим";
Текущий архив: 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