![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дин.массив в классе = траблы, ГОРЮ! [D7, WinXP]
PenguinX © (2006-06-29 06:56:00)Здрасьте всем!
Пишу программку, столкнулся с такой проблемой - не могу в классе работать с дин. массивом, Length(дин.массив) = AV, SetLength(дин.массив) = AV и т.д.
Классы вида:
type
Tmyclass3 = class
...
end;
Tmyclass2 = class
...
B: array of Tmyclass3;
end;
Tmyclass1 = class
...
A: array of Tmyclass2;
end;
При попытке обращения к Tmyclass1.A сыплются ошибки AV, даже при попытке определить его размер с помощью Length.
Помогите, люди добрые, остальная часть программы уже готова, осталось тока с этим разобраться. Сегодня нужно кровь из носу доделать, иначе - отчисление. Если можно, выложите кто-нить рабочее решение, т.к. читать мануалы уже не успеваю.
Всем заранее БО-О-О-ОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
Amoeba (2006-06-29 11:11:00) [1]А может имеет смысл использовать не дин. массивы объектов, а TObjectList (может оказаться целесообразным создать наследников от TObjectList дабы несколько упростить работу с элементами списка)? Это заметно упростит код, в первую очередь деструкторов.
Ketmar (2006-06-29 10:44:00) [2]не надо. RTFM.
Barloggg (2006-06-29 10:32:00) [3]а разве не надо прежде чем динамический массив сделать =nil сначала укоротить его до нуля? setlength( ,0);
а то попахивает протечками.
evvcom (2006-06-29 09:09:00) [4]И собственно сам объект класса Tmyclass1 тоже не забыть создать. А то судя по
> При попытке обращения к Tmyclass1.A
есть подозрение, что это обращение так и идет. Обращение же к myclass1.A (после создания объекта класса Tmyclass1) к AV не приведет (не должно во всяком случае, хотя извратиться можно везде :)).
Юрий Зотов (2006-06-29 07:35:00) [5]Только установить длину - этого мало. Надо ведь еще создать объекты, на которые ссылаются элементы массива.
constructor TMyClass1.Create;
var
i: integer;
begin
inherited;
SetLength(A, 10);
for i := Low(A) to High(A) do
A[i] := TMyClass2.Create
end;
destructor TMyClass1.Destroy;
var
i: integer;
begin
for i := Low(A) to High(A) do
A[i].Free;
A := nil;
inherited
end;