/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Array i klasser
Fra : Claus Christiansen


Dato : 21-07-01 18:00

Hej

Er det virkelig rigtigt at man ikke kan have et array i en klasse se
f.eks. nedenstående eksempel, som jeg ikke umiddelbart kan se nogen fejl
ved men ved programkørsel og forsøg på at sætte en værdi via Matrix[2,2]
= 3 får man en accessviolation. - Hvad har jeg glemt eller er det bare
ikke muligt??? (flytter jeg FMatrix: TMa... uden for klassen så virker
det fremragende, men så er problemet jo at jeg ikke har hvert sit array
til hver instans).

type
TMatrixArray = array[0..15, 0..15] of Integer;
TPixelMatrix = class(TPersistent)
private
FMatrix: TMatrixArray;

procedure put(i, j: Integer; x: Integer);
function get(i, j: Integer): Integer;
public
property Matrix[i, j: Integer]: Integer read Get write Put; default;
end;

procedure TPixelMatrix.put(i, j: Integer; x: Integer)
begin
FMatrix[i, j] := x;
end;

mvh
Claus

--
Claus Christiansen, <mailto:cch@unipeople.dk>

personal: http://www.bigfoot.com/~kruc/; pythia: http://www.pythia.dk
============================================--------------------------
"Computers are useless. They can only give you answers."
- Pablo Picasso (1881-1973)

 
 
Niels (21-07-2001)
Kommentar
Fra : Niels


Dato : 21-07-01 18:25

Just as I expected, Claus Christiansen came up with this:

>Er det virkelig rigtigt at man ikke kan have et array i en klasse se
>f.eks. nedenstående eksempel, som jeg ikke umiddelbart kan se nogen fejl
>ved men ved programkørsel og forsøg på at sætte en værdi via Matrix[2,2]
>= 3 får man en accessviolation. - Hvad har jeg glemt eller er det bare
>ikke muligt??? (flytter jeg FMatrix: TMa... uden for klassen så virker
>det fremragende, men så er problemet jo at jeg ikke har hvert sit array
>til hver instans).
>
>type
> TMatrixArray = array[0..15, 0..15] of Integer;
> TPixelMatrix = class(TPersistent)
> private
> FMatrix: TMatrixArray;
>
> procedure put(i, j: Integer; x: Integer);
> function get(i, j: Integer): Integer;
> public
> property Matrix[i, j: Integer]: Integer read Get write Put; default;
> end;

Prøv at bruge en pointer til din matrix i stedet, og så alloker
hukommelsen til matrix'en i Create() og dealloker i Destroy().
Cirka sådan her:

type
PMatrixArray = ^TMatrixArray;
TMatrixArray = array[0..15, 0..15] of integer;
TPixelMatrix = class(TPersistent)
private
FMatrix: PMatrixArray;
{... sæt selv resten ind}
public
constructor Create; override; // eller hvordan den nu ser ud
destructor Destroy; override;
end;

constructor TPixelArray.Create;
begin
inherited;
New(FMatrix);
end;

destructor TPixelArray.Destroy;
begin
Dispose(FMatrix);
end;

Niels
--
http://www.niller.f2s.com/ - niLLer's pages, that's my software
http://g4s.dnsq.org/ - when I'm online
g4s ad post dot ocm - new email! (note: it's .com !)
ICQ#: 50187323

Claus Christiansen (21-07-2001)
Kommentar
Fra : Claus Christiansen


Dato : 21-07-01 23:08

g4s@post-and-not-spam.com (Niels) wrote in
news:3b59b985.14046180@news.inet.tele.dk:

><klip en hel masse>
>
> Prøv at bruge en pointer til din matrix i stedet, og så alloker
> hukommelsen til matrix'en i Create() og dealloker i Destroy().
> Cirka sådan her:

Jeg vil sige det på den måde at hvis ikke det fungerer så forstår jeg
absolut ingenting!! - men er det ikke rigtigt at jeg ikke har overset
noget, og burde det ikke kunne lade sig gøre?? (Jeg kan nemlig ikke lige
komme poå nogle argumenter for hvorfor det ikke skulle være muligt).

Claus
--
Claus Christiansen, <mailto:cch@unipeople.dk>

personal: http://www.bigfoot.com/~kruc/; pythia: http://www.pythia.dk
============================================--------------------------
"Computers are useless. They can only give you answers."
- Pablo Picasso (1881-1973)

Claus Christiansen (21-07-2001)
Kommentar
Fra : Claus Christiansen


Dato : 21-07-01 23:16

Claus Christiansen <kruc@bigfoot.com> wrote in
news:Xns90E5D7F95CB32krucsid@192.168.1.2:

> g4s@post-and-not-spam.com (Niels) wrote in
> news:3b59b985.14046180@news.inet.tele.dk:
>
>><klip en hel masse>
>>
>> Prøv at bruge en pointer til din matrix i stedet, og så alloker
>> hukommelsen til matrix'en i Create() og dealloker i Destroy().
>> Cirka sådan her:
>
> Jeg vil sige det på den måde at hvis ikke det fungerer så forstår jeg
> absolut ingenting!! - men er det ikke rigtigt at jeg ikke har overset
> noget, og burde det ikke kunne lade sig gøre?? (Jeg kan nemlig ikke
> lige komme poå nogle argumenter for hvorfor det ikke skulle være
> muligt).
>
> Claus

Ja, bare glem det hele - og jeg har forhåbentlig lært at oprette det
rigtige object... alt fungerer som det burde gøre -- undskyld Borland at
jeg en overgang tvivlede! :)

Claus

--
Claus Christiansen, <mailto:cch@unipeople.dk>

personal: http://www.bigfoot.com/~kruc/; pythia: http://www.pythia.dk
============================================--------------------------
"Computers are useless. They can only give you answers."
- Pablo Picasso (1881-1973)

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste