array som parameter

Tags:    delphi

hvordan kan jeg bruge en dynamisk array of <ukendt type objekt> som var parameter i en procedure?

koden:
procedure MF(var A: array of TObject);

resulterer i fejlen:
[error] xxx.pas (xxx): Incompatible types 'Array' and 'dynamic array'

når jeg kalder:
MF(Fealds);

hvor Fealds er:
Fealds: array of TFeald;



9 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
hvordan kan jeg bruge en dynamisk array of <ukendt type objekt> som var parameter i en procedure?

koden:
procedure MF(var A: array of TObject);

resulterer i fejlen:
[error] xxx.pas (xxx): Incompatible types 'Array' and 'dynamic array'

når jeg kalder:
MF(Fealds);

hvor Fealds er:
Fealds: array of TFeald;


Først, MF tager en Array of TObject! Ikke en array of TFeald; !

Og for det andet: Jeg ville foretrække at bruge en pointer!

F.eks. kunne du lave en klasse som flg.:
PFealds = ^TFealds;
TFealds = array of TFeald;

og Fealds:
Fealds: TFealds;

Så MF:
procedure MF(A: PFealds);
begin
A^[EtEllerAndetNummer].EnEllerAndenVariabel := 'EnEllerAndenVærdi';
end;

Så kunne MF kaldes sådan her:
MF(@Fealds);

MH.

The-Freak

Livet er for kort til at kede sig.



Men min array er ikke altid af TFeald, så jeg ville bare bruge TObject, som TFeald arver fra. Kan man ikke det?

[Redigeret d. 09/10-04 18:13:02 af Jesper Kristensen]



Men min array er ikke altid af TFeald, så jeg ville bare bruge TObject, som TFeald arver fra. Kan man ikke det?


Hmmm... Burde man godt kunne! Men tror du skal have fat i nogle pointers!

MH.

The-Freak

Livet er for kort til at kede sig.



Ville helst lave noget ala den indbyggede SetLength



Ville helst lave noget ala den indbyggede SetLength


Det eneste du skal bruge pointers til er at overføre array'ets addresse... Intet andet!

MH.

The-Freak

Livet er for kort til at kede sig.




Men hvilke manipulationer laver du??? Hvis du ændrer noget der er specifikt for typen(Hvilket jeg antager du gør :P), så bliver du nød til at lave en if sætning i din MF, der bestemmer hvilken array type det er! Ihvertfald hvis du vælger at bruge pointers!

MH.

The-Freak

Livet er for kort til at kede sig.



Det MF gør er at bytte om på nogle af værdierne i arrayet, så typen er underordnet. det virker nu ved at jeg har brugt en type:

TArray = array of TObject;

men det er lidt irriterende at skulle bruge

MF(TArray(MinArray));
hver gang MF kaldes



Det MF gør er at bytte om på nogle af værdierne i arrayet, så typen er underordnet. det virker nu ved at jeg har brugt en type:

TArray = array of TObject;

men det er lidt irriterende at skulle bruge

MF(TArray(MinArray));
hver gang MF kaldes


Så kan du godt bruge pointers :D... Hvis MF skulle bytte om på to værdier kunne det f.eks. se sådan her ud:
Fold kodeboks ind/udKode 


Så kalder du den bare med MF(@ArrayetMedDineTObjects);

MH.

The-Freak

Livet er for kort til at kede sig.



Har valgt ikke at bruge pointers, men bare en type, tak for hjælpen



t