Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Array einer Klasse (https://www.delphipraxis.net/121974-array-einer-klasse.html)

Glocke89 7. Okt 2008 19:48


Array einer Klasse
 
Hallo,

ich bin in Sachen Klassen Neuling und habe mir (mit etwas Mühe) eine eigene Klasse zusammengebaut:
Delphi-Quellcode:
  // ---------------------------- Klasse TDatei ----------------------------
  TDatei = class(TObject)
  private
    FPfad: string;
    FName: string;
    FBeschreibung: string;
  public
    constructor Create;
    destructor Destroy;
    procedure Ausfuehren;
    property Pfad: string read FPfad write FPfad;
    property Name: string read FName write FName;
    property Beschreibung: string read FBeschreibung write FBeschreibung;
  end;
  // ---------------------------- Ende Klasse TDatei ---------------------------- 

  TDateiArray = Array of TDatei;
 
var
  Form1: TForm1;
  DateiArray: TDateiArray;

implementation

// ---------------------------- Klasse TDatei ----------------------------
constructor TDatei.Create;
begin
  inherited;
  Pfad := '';
  Name := '';
  Beschreibung := '';
end;

destructor TDatei.Destroy;
begin
  //
  inherited;
end;

procedure TDatei.Au :dp: sfuehren;
var
  Proc: TProcess;
begin
  Proc:=TProcess.Create(nil);
  Proc.CommandLine:=Pfad;
  Proc.Execute;
  Proc.Free;
end;
// ---------------------------- Ende Klasse TDatei ----------------------------
Nun wollte ich mit
Delphi-Quellcode:
DateiArray[i+1].Create;
(i vom Typ Integer als Zähler für das Array)
eine Instanz erstellen. Jedoch kommt eine Fehlermeldung:
Code:
Project raised exception class 'External: SIGSEGV'.
Muss ich für jedes Elementes des Arrays eine Instanz erstellen, oder nur einmal für das Array an sich? Wenn eine Instanz reicht: wie muss ich das bewerkstelligen?

Danke im Vorraus :dp:

/EDIT: beim Thema-Namen ein "r" vergessen ^^

Dax 7. Okt 2008 19:51

Re: Array eine Klasse
 
Nicht "instanz.Create", sondern "instanz := Klasse.Create".

Glocke89 7. Okt 2008 19:52

Re: Array eine Klasse
 
Zitat:

Zitat von Dax
Nicht "instanz.Create", sondern "instanz := Klasse.Create".

xD stimmt

Delphi-Quellcode:
DateiArray[i+1] := TDateiArray.Create;
So? da kommt nämlich
Code:
Unit1.pas(125,36) Error: Illegal qualifier

Dax 7. Okt 2008 19:53

Re: Array eine Klasse
 
Seit wann ist TDateiArray der Typ eines Arrayelements? :gruebel:

Glocke89 7. Okt 2008 19:55

Re: Array einer Klasse
 
Delphi-Quellcode:
TDateiArray = Array of TDatei;

// [...]

DateiArray: TDateiArray;
Naja ... hab das so definiert. Würdest du das anders lösen?

sx2008 7. Okt 2008 19:56

Re: Array eine Klasse
 
Delphi-Quellcode:
SetLength(DateiArray, 5); // dynamisches Array anlegen

for i := Low(DateiArray) to High(DateiArray) do
begin
  // wichtig: in Delphi werden Objekt immer so erzeugt
  // object := TKlasse.Create
  // das ist ein wesentlicher Unterschied zu C++
  // Der klassische Anfängerfehler ist, dass man das := vergisst
  DateiArray[i] := TDatei.Create; // Objekt erzeugen
  DateiArray[i].Beschreibung := Format('Datei %d', [i]);
end

Glocke89 7. Okt 2008 20:07

Re: Array eine Klasse
 
Zitat:

Zitat von sx2008
Delphi-Quellcode:
SetLength(DateiArray, 5); // dynamisches Array anlegen

for i := Low(DateiArray) to High(DateiArray) do
begin
  // wichtig: in Delphi werden Objekt immer so erzeugt
  // object := TKlasse.Create
  // das ist ein wesentlicher Unterschied zu C++
  // Der klassische Anfängerfehler ist, dass man das := vergisst
  DateiArray[i] := TDatei.Create; // Objekt erzeugen
  DateiArray[i].Beschreibung := Format('Datei %d', [i]);
end

Genial, das klappt!
Das einzige Problem ist, dass ich nie weiß wie viele Elemente das Feld beinhalten soll...hat jemand dafür auch einen Vorschlag?

/EDIT: Kann mir jemand die Zeile hier erklären?
Delphi-Quellcode:
DateiArray[i].Beschreibung := Format('Datei %d', [i]);

jfheins 7. Okt 2008 20:10

Re: Array einer Klasse
 
@edit (^^)

Das ist eine andere Schreibweise für 'Datei ' + inttostr(i) ;)

Du gibst der Format-Funktion nen String, der Platzhalter beinhaltet, und dann setzt sie die variablen ein, die ihr im 2. Argument übergeben werden.

Glocke89 7. Okt 2008 20:16

Re: Array einer Klasse
 
okay. danke für die Info :)
Wegen dem Array ... ich könnte zwar die Anzahl einfach sehr hoch machen aber das wäre (1) kein guter Stil und (2) bei größeren Programmen u.U. sehr speicherlastig.

PS: in der Berufsschule hatten wir heute Zeiger (wir machen das zwar mit C++ aber egal). Kann man hier mit Zeigern was optimieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz