![]() |
Array einer Klasse
Hallo,
ich bin in Sachen Klassen Neuling und habe mir (mit etwas Mühe) eine eigene Klasse zusammengebaut:
Delphi-Quellcode:
Nun wollte ich mit
// ---------------------------- 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 ----------------------------
Delphi-Quellcode:
(i vom Typ Integer als Zähler für das Array)
DateiArray[i+1].Create;
eine Instanz erstellen. Jedoch kommt eine Fehlermeldung:
Code:
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?
Project raised exception class 'External: SIGSEGV'.
Danke im Vorraus :dp: /EDIT: beim Thema-Namen ein "r" vergessen ^^ |
Re: Array eine Klasse
Nicht "instanz.Create", sondern "instanz := Klasse.Create".
|
Re: Array eine Klasse
Zitat:
Delphi-Quellcode:
So? da kommt nämlich
DateiArray[i+1] := TDateiArray.Create;
Code:
Unit1.pas(125,36) Error: Illegal qualifier
|
Re: Array eine Klasse
Seit wann ist TDateiArray der Typ eines Arrayelements? :gruebel:
|
Re: Array einer Klasse
Delphi-Quellcode:
Naja ... hab das so definiert. Würdest du das anders lösen?
TDateiArray = Array of TDatei;
// [...] DateiArray: TDateiArray; |
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 |
Re: Array eine Klasse
Zitat:
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]);
|
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. |
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 14:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz