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

Вниз

Дин.массив в классе = траблы, ГОРЮ!   Найти похожие ветки 

 
PenguinX ©   (2006-06-29 06:56) [0]

Здрасьте всем!

Пишу программку, столкнулся с такой проблемой - не могу в классе работать с дин. массивом, 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.

Помогите, люди добрые, остальная часть программы уже готова, осталось тока с этим разобраться. Сегодня нужно кровь из носу доделать, иначе - отчисление. Если можно, выложите кто-нить рабочее решение, т.к. читать мануалы уже не успеваю.

Всем заранее БО-О-О-ОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!


 
Юрий Зотов ©   (2006-06-29 07:35) [1]

Только установить длину - этого мало. Надо ведь еще создать объекты, на которые ссылаются элементы массива.

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;


 
evvcom ©   (2006-06-29 09:09) [2]

И собственно сам объект класса Tmyclass1 тоже не забыть создать. А то судя по

> При попытке обращения к Tmyclass1.A

есть подозрение, что это обращение так и идет. Обращение же к myclass1.A (после создания объекта класса Tmyclass1) к AV не приведет (не должно во всяком случае, хотя извратиться можно везде :)).


 
Barloggg   (2006-06-29 10:32) [3]

а разве не надо прежде чем динамический массив сделать =nil сначала укоротить его до нуля? setlength( ,0);

а то попахивает протечками.


 
Ketmar ©   (2006-06-29 10:44) [4]

не надо. RTFM.


 
Amoeba ©   (2006-06-29 11:11) [5]

А может имеет смысл использовать не дин. массивы объектов, а TObjectList (может оказаться целесообразным создать наследников от TObjectList дабы несколько упростить работу с элементами списка)? Это заметно упростит код, в первую очередь деструкторов.



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
15-1150695570
Ega23
2006-06-19 09:39
2006.07.16
С Днём рождения! 18 июня


15-1150366124
wal
2006-06-15 14:08
2006.07.16
Тестирование WEB-страничек.


2-1151348471
Oleynik_off
2006-06-26 23:01
2006.07.16
Программа для одного единственного компьютера


2-1151328395
dest81
2006-06-26 17:26
2006.07.16
Клиент-сервер


8-1138713098
example
2006-01-31 16:11
2006.07.16
Обработка JPEG