Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - function of Array


der organist - Di 16.12.08 19:23
Titel: function of Array
Hi Leutz,

ich möchte folgende Funktion in mein Programm einbauen:


Delphi-Quelltext
1:
function Mischen(aStapel: Array of Karte):Array of Karte;                    


Strg+F9 sagt dann aber: Identifier expected but ARRAY found.

Wie kann ich eine solche Funktion einbauen?

MfG,


Xentar - Di 16.12.08 20:08


Delphi-Quelltext
1:
2:
3:
4:
Type
  TKartenDeck: Array of Karte

  function Mischen(aStapel: TKartenDeck):TKartenDeck;


oder alternativ:

Delphi-Quelltext
1:
2:
3:
4:
Type
  TKartenDeck: Array of Karte

  procedure Mischen(var aStapel: TKartenDeck);


Delete - Mi 17.12.08 09:44

Fast ;)

Delphi-Quelltext
1:
2:
Type
  TKartenDeck = Array of Karte;


der organist - Mi 17.12.08 20:21

Jo, danke, hab ich dann per Ausprobieren auch rausbekommen ==) Danke euch beiden.


der organist - Mi 17.12.08 20:42

ich hab zwar schon als beantwortet gemeldet, hab trotzdem noch ne Frage zu meinem Text:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
unit UAktion;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UKarte, StdCtrls;

type
  Aktion=class;
  TKartendeck=Array of Karte;
  function Mischen(aStapel:TKartendeck):TKartendeck;



implementation

function TKartendeck.Mischen(aStapel:TKartendeck):TKartendeck;
var
  k, l, zufallskarte: Integer;

begin
  for k := 1 to Length(Mischen) do
    Mischen[k].Wert:=0;
    
  SetLength(Mischen,Length(aStapel));
  for k := 1 to 8 do begin
    for l := 1 to Length(Mischen) do begin
      zufallskarte:=Random(Length(Mischen))+1;
      if Mischen[zufallskarte].Wert=0 then
        Mischen[zufallskarte]:=aStapel[l];
    end;
  end;
end;

end.


Ich will also in anderen Units z.B. Aktion.Mischen aufrufen, allerdings brauche ich (oder nicht??) einen Kartendecktyp, um nen ganzen Kartenstapel in Arrayform in meine Funktion zu übergeben und die Funktion soll dann auch einen Kartenstaperl zurückgeben...

MfG,


Delete - Mi 17.12.08 20:51

Zum Einen ist Deine Klasse ziemlich leer (entspricht TObject), zum Anderen würde ich den Stapel als Var-Parameter übergeben und innerhalb der Funktion ändern.


Xentar - Mi 17.12.08 20:54

Jo, entweder als var Parameter, oder wenn du es unbedingt als Function machen willst, solltest du auch "result" benutzen.


Delete - Mi 17.12.08 20:57

Das Dumme ist bei solchen Rückgabewerten, dass man sie auch noch freigeben muss. Das wird gern vergessen.


der organist - Mi 17.12.08 21:06

also eher so?:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type
  Aktion=class
  private
  public
  procedure Mischen(var aStapel:Array of Karte);
end;


sieht auch ganz gut aus, muss nur am Funktionsinhalt ein bisschen herumbasteln...:D. Danke nochmal für diese (wieder mal) schnelle Lösung.