|
| et andet problem med arrays Fra : Gert Hansen |
Dato : 04-02-04 12:57 |
|
En polygon er i Delphi termer "Array of TPoint"
Hvis man så skal have flere polygoner må det jo være en "Array of TPolygon"
hvor "type TPolygon = array of Tpoint"
Det er nu noget rod, så jeg tænkte at jeg smider polygonen i sin egen Class,
da jeg alligevel har en række funktioner som skal kører i klassen.
type TSlice = class(TObject)
private
orgPoly: array of TPoint;
public
procedure Create;
procedure Free;
procedure setOrgPoly(pol: array of TPoint);
end;
procedure TSlice.Create;
begin
setLength(orgPoly,0);
end;
procedure TSlice.setOrgPoly(pol: array of TPoint);
begin
setLength(orgPoly,length(pol));
orgPoly:=pol;
end;
Ligeså snart jeg prøver at lave en TSlice.create får jeg en
EAccessViolation. Jeg går naturligvis ud fra at det er Array'en inde i min
klasse som gør det. Hvordan omgår jeg problemet, så jeg kan have en dynamisk
række data inde i min klasse... ?
/GertH
| |
David A. D. Konrad (04-02-2004)
| Kommentar Fra : David A. D. Konrad |
Dato : 04-02-04 15:18 |
|
"Gert Hansen" <gert@hansen-net.dk> wrote in message
news:bvqmoh$tr6$1@news.cybercity.dk...
(...)
> Ligeså snart jeg prøver at lave en TSlice.create får jeg en
> EAccessViolation. Jeg går naturligvis ud fra at det er Array'en inde i min
> klasse som gør det. Hvordan omgår jeg problemet, så jeg kan have en
dynamisk
> række data inde i min klasse... ?
Din create-metode skal være en konstruktør, ikke en procedure. Et object af
typen "TSlice" er først allokeret, når det er blevet dannet med en
konstruktør. Prøv at lav følgende ændringer
public
CONSTRUCTOR create;
....
CONSTRUCTOR TSlice.Create;
begin
INHERITED;
setLength(orgPoly,0); //burde faktisk ikke være nødvendigt, eftersom et
objects variabler altid "nulstilles" når det kreeres...
end;
mintestslice:=TSlice.create;
| |
Gert Hansen (05-02-2004)
| Kommentar Fra : Gert Hansen |
Dato : 05-02-04 09:14 |
|
> public
> CONSTRUCTOR create;
Takker. Det er godt nok for lang tid siden jeg sidste har lavet klasser ;)
| |
|
|