TList

5 отговора 144 прегледа
#1

TList

Един въпрос защо по дяволите ми гърми List.Add() ????


type
PRolka = ^TRolka;
TRolka = class
public
R:Integer;
X:Integer;
Y:Integer;
Pen:TPen;
Brush:TBrush;
Canvas:TCanvas;
constructor Create (Owner:TCanvas);
destructor Destroy; override;
procedure Paint;
end;

TRolki = class
private
procedure RolkaPaint(Rolka:TRolka);
public
List:TList;
RolkaP:PRolka;
constructor Create;
destructor Destroy; override;
function Add(Rolka:TRolka):Integer;
procedure Delete(Index:Integer);
procedure Paint;
end;
.
.
constructor TRolki.Create;
begin
List := TList.Create;
end;
.
.
function TRolki.Add(Rolka:TRolka):Integer;
begin
New(RolkaP);
RolkaP.X := 2;
List.Add(RolkaP) <-- Ето тук дава Access Violation
end;

AquilaX

____________
умният знае кога да говори, мъдрият знае кога да мълчи
Отговор
в отговор на AquilaX #2

Re: TList

Според мен Access Violation-a идва от предходния ред...
Виждам че скоро си преминал на Delphi...
Защо използваш New за да създадеш обект от тип TRolka
Във Делфи всички променливи от тип клас са указатели, т.е. няма нужда от този ред

type PRolka = ^TRolka

Така ще стане само ако TRolka e record, но ще трябва да разкараш функциите

Решението на въпроса е следното:


TRolki = class
...
RolkaP : TRolka;
...
end;

function TRolki.Add(Rolka:TRolka):Integer;
begin
RolkaP := TRolka.Create;
RolkaP.X := 2;
List.Add(RolkaP);
end;

От кода ти виждам че имаш доста празнини относно обектно-ориент. програмиране / без да се опитвам да те засегна/. Препоръчвам ти да си
вземеш някоя книжка за Delphi

Отговор
в отговор на NiL^ #3

Re: TList

Тъй, тъй че имам празнини имам но не е в това въпроса. Опитах това което си написал и пак не работи и проблемът си е точно в List.Add(RolkaP) и представа си нямам защо след като List си е create-нат правилно преди това. Колкото до New останало е защото TRolka в началото си беше record. Благодаря все пак.

AquilaX

____________
умният знае кога да говори, мъдрият знае кога да мълчи
Отговор
в отговор на AquilaX #4

Re: TList

Знаеш ли... я ми прати целия source.. ще опитам да го разнищя... ако искаш де

Отговор
в отговор на AquilaX #5

Re: TList

mail-a mi e zerosoft@unacs.bg

Отговор
в отговор на NiL^ #6

Re: TList

Благодаря за помощта оправих се. Грешката беше във викащата процедура.

AquilaX

____________
умният знае кога да говори, мъдрият знае кога да мълчи
Отговор