Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Dynamisches Array in Prozeduraufruf
Kulmi - Fr 18.07.03 12:33
Titel: Dynamisches Array in Prozeduraufruf
Hallo!
Ich habe folgendes Problem:
Mein Programm hat zwei Klassen. In KlasseA soll folgendes passieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure KlasseA.test; var einArray : Array of String;
begin fueller := Klasse2.create(); fueller.arrayFuellen(einArray); end; |
In der zweiten Klasse brauche ich folglich eine Prozedur, die dem dynamischen Array eine Länge zuweist und es anschließend füllt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Klasse2.arrayFuellen(anArray: Array of String); var i : Integer;
begin ...
SetLength(anArray, query1.fieldCount);
for i := 0 to (Query1.fieldCount) do begin anArray[i] := Query1.fields.Fields[i].AsString; end; |
Die Anweisung setLength in der zweiten Klasse löst allerdings beim kompilieren den Fehler 'inkompatible Typen' aus. Hat jemand eine Lösung zu dem Problem?
Gruß,
Kulmi
PS: Editiert um die zweite Prozedur nachzuliefern, sorry...
Simon Joker - Fr 18.07.03 12:46
Hi Kulmi
erstmal Willkommen im Forum!
Trotzdem, wie wäre es mit der Deklaration der Klassenmethode "ArrayFuellen", meine seherischen Fähigkeiten sind eher begrenzt.
Fürs Allgemeine:
Um Arrays an Proceduren oder Functionen zu übergeben verwende ich IMMER einen Typ des Arrays. Zweitens muß dieser Parameter als var übergeben werden.
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TDynStrArray : array of string;
...
procedure FillStrArray(var Arr:TDynStrArray; L:Longword) begin ... SetLength(Arr,L); ... end;
var StrArr:TDynStrArray; begin FillStrArray(StrArr,10); end; |
Kulmi - Fr 18.07.03 14:29
Wenn ich den Typen verwende, klappt es - vielen Dank für die schnelle Hilfe!
Wäre allerdings nett, wenn mir jemand erklären könnte, warum es dann funktioniert und vorher nicht (Code sollte nun vollständig sein).
Kulmi
Taurin - Sa 19.07.03 14:59
In Delphi übergibt man Funktionen/Proceduren nur einfache Typen, die nur aus einem Bezeichner bestehen. Wenn du einen anderen Typen (zB array of string oder file of byte ....) benutzen willst, definiere dir einfach deinen eigenen Typ (siehe oben).
Das ist einfach eine Spracheigenheit von Delphi.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!