Текущий архив: 2004.06.13;
Скачать: CL | DM;
ВнизНепонятки с указателями Найти похожие ветки
← →
jafar (2004-05-30 22:21) [0]Добрый день.
Господа, подскажите что я делаю не так.
Есть TList в котором я храню элементы класса TFacilityLink. Добавляю их в коллекцию так:
l := TFacilityLink.Create( imgSource.Canvas );
l.Source := sourceModel.Generators[ i ];
l.Destination := selectedFacility;
sourceModel.links.Add( @l );
links - это и есть TList.
При попытке вызвать метод класса TFacilityLink вылетает Access Violation:
for i := 0 to model.links.Count - 1 do begin
p := model.links.Items[ i ];
PFacilityLink(p)^.Erase; // тут ошибка
end;
Подскажите, как добиться нормального приведения типа и вызова метода моего класса?
← →
Palladin © (2004-05-30 22:28) [1]Что такое @? Это адрес по которому содержится значение переменной l. Таким образом ты все время добавляешь в список одно и тоже значение, которое после отработки процедуры в которой оно объявлено, теряет смысл ибо содержится в стеке. Идентификаторы объектов класса сами по себе являются указателями. Соответственно бессмыленное @l - заменяем на очень даже осмысленное Pointer(l);
← →
Jel © (2004-05-30 22:30) [2]
> sourceModel.links.Add( @l );
Заменить на sourceModel.links.Add( pointer(l) );
← →
jafar (2004-05-30 22:51) [3]Спасибо, все заработало.
Страницы: 1 вся ветка
Текущий архив: 2004.06.13;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.032 c