Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 04.11.20 18:43 
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.
ausblenden 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.
ausblenden Quelltext
1:
[Fehler] StrGrid.pas(276): Inkompatible Typen					

Laut Hilfe kann ich das Array übergeben!

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.

Also
ausblenden 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? ist noch ein englischer Beitrag dazu.
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Fr 06.11.20 14:24 
Hallo Th69,

Dank Dir für die Antwort. Hat geholfen!

Grüße von der Nordsee

Peter