Autor Beitrag
Kulmi
Hält's aus hier
Beiträge: 4


D5 Enterp.
BeitragVerfasst: Fr 18.07.03 12:33 
Hallo!

Ich habe folgendes Problem:

Mein Programm hat zwei Klassen. In KlasseA soll folgendes passieren:
ausblenden 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:

ausblenden 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
  {Datenbankabfrage vorbereiten und ausführen}
  ...

  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...


Zuletzt bearbeitet von Kulmi am Fr 18.07.03 14:13, insgesamt 2-mal bearbeitet
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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;

//Aufruf
var StrArr:TDynStrArray;
begin
  FillStrArray(StrArr,10);
end;
Kulmi Threadstarter
Hält's aus hier
Beiträge: 4


D5 Enterp.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34

Win XP
D6 Personal
BeitragVerfasst: 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.