Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Dynamische Arrays an procedure übergeben


Peter18 - Mi 04.11.20 18:43
Titel: Dynamische Arrays an procedure übergeben
Ein freundliches Hallo an alle,

ich verwende Delphi 4 umd möchte mir in einer dynamischen Liste hin und wieder einen Index merken. Dazu habe ich die Procedure AddIndex geschrieben.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// Hilfsroutinen ###################################################### AddIndex

Procedure AddIndex( var A : array of Integer; I : Integer );
begin
  SetLength( A, Length( A ) + 1 );
  A[ Length( A ) - 1 ] := I      ;
end;
// Hilfsroutinen ###################################################### AddIndex

Die Liste wird übergeben und soll um ein Element (I) erweitert werden. Der Kompiler meckert aber über SetLength.

Quelltext
1:
[Fehler] StrGrid.pas(276): Inkompatible Typen                    

Laut Hilfe kann ich das Array übergeben!


Quelltext
1:
2:
3:
4:
5:
In einigen Funktions- und Prozedurdeklarationen werden Array-Parameter in der Form array of Basistyp ohne festgelegten Indextyp angegeben: 

function CheckStrings(A: array of string): Boolean;

In diesem Fall kann die Funktion auf alle Arrays des angegebenen Basistyps angewendet werden, unabhängig von der Größe der Arrays und der Art ihrer Indizierung

Hat jemand eine Erklärung, warum das so ist? Muß die Procedure zu dem Objekt "StrGrid" gehören, also "T_StrGrid.AddIndex" heißen??

Grüße von der Nordsee

Peter


Th69 - Mi 04.11.20 19:45

Hallo,

du mußt für den Parameter einen eigenen Typen deklarieren (ansonsten legt der Compiler einen eigenen einzigartigen Typ dafür an). Lies auch SetLength mein problem [https://www.delphipraxis.net/79913-setlength-mein-problem.html].

Also

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Type
IntArray = array of Integer;

Procedure AddIndex( var A : IntArray; I : Integer );
begin
    {...}
end;


Edit: Why can I not use SetLength in a function which receives an array parameter? [https://stackoverflow.com/questions/12958858/why-can-i-not-use-setlength-in-a-function-which-receives-an-array-parameter] ist noch ein englischer Beitrag dazu.


Peter18 - Fr 06.11.20 14:24

Hallo Th69,

Dank Dir für die Antwort. Hat geholfen!

Grüße von der Nordsee

Peter