TList
5 отговора
144 прегледа
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
____________
умният знае кога да говори, мъдрият знае кога да мълчи
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
____________
умният знае кога да говори, мъдрият знае кога да мълчи
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
Виждам че скоро си преминал на 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
Re: TList
Тъй, тъй че имам празнини имам но не е в това въпроса. Опитах това което си написал и пак не работи и проблемът си е точно в List.Add(RolkaP) и представа си нямам защо след като List си е create-нат правилно преди това. Колкото до New останало е защото TRolka в началото си беше record. Благодаря все пак.
AquilaX
____________
умният знае кога да говори, мъдрият знае кога да мълчи
AquilaX
____________
умният знае кога да говори, мъдрият знае кога да мълчи
Re: TList
Знаеш ли... я ми прати целия source.. ще опитам да го разнищя... ако искаш де
Re: TList
Благодаря за помощта оправих се. Грешката беше във викащата процедура.
AquilaX
____________
умният знае кога да говори, мъдрият знае кога да мълчи
AquilaX
____________
умният знае кога да говори, мъдрият знае кога да мълчи