![]() |
Wie Array mit Pointern auf Klassen-Instanzen füllen?
Hallo Community,
ich möchte gerne ein Array of Pointer mit Zeigern auf Klassen-Instanzen füllen. Leider klappt das bei mir nicht so ganz. Ich habe als erstes meine Klasse mit dem Array of Pointer:
Delphi-Quellcode:
Und dann noch eine andere Klasse TGround. Jetzt möchte ich in den contructor eine Schleife, die dass komplette Array mit Zeigern auf TGround-Instanzen füllt. D.h. ich müsste in der Schleife die Instanzen auch erstellen. Aber wie mache ich das? Ich kann ja schließlich nicht sowas wie
TWorld = class
private [ ... ] FBufferArray: array of array of Pointer; public constructor Create(WorldHeight, WorldWidth: Integer); [ ... ] end;
Delphi-Quellcode:
schreiben.
for i := 0 to FWorldHeight do
for j := 0 to FWorldWidth do begin FBufferArray[i][j] := new(TGround.Create); end; Hat jemand eine Idee? Danke im Voraus. MfG |
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
Wie wäre es damit...
Delphi-Quellcode:
TWorld = class
private [ ... ] FBufferArray: array of array of TCreatur; public constructor Create(WorldHeight, WorldWidth: Integer); [ ... ] end;
Delphi-Quellcode:
SetLength(fBufferArray, FWorldHeight);
for i := 0 to FWorldHeight - 1 do for j := 0 to FWorldWidth - 1 do begin SetLength(fBufferArray[i], FWorldWidth); FBufferArray[i][j] := TGround.Create; end; |
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
@neolithos: Geht leider nicht, da meine TGround Klasse nur ein Beispiel ist. Wenn das ganze läuft, sollen da Pointer von 4 verschiedenen Klassen in das Array rein. Deshalb ja auch das Array of Pointer, da ich ja sonst nicht 4 verschiedene Klassen in einem Array speichern kann.
|
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
Dann tausche TGround durch TObject.
Das ist "so eine Art" Pointer für Klassen, denn wie ich verstanden habe sind es ja 4 Klassen. |
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
Zitat:
Es darf höchsten eine Dimension offen bleiben. Also etwa: array[1..100] of array of Pointer Der Datentyp Pointer ist auch Falsch. Da alle Klasse in Delphi von TObject abgeleitet sind wäre TObject der richtige Datentyp. Angenommen du möchtest ein 2-dim. Array mit offenen Grenzen. Dann muss das mehrdimensionale Array auf das eindimensionale Array abgebildet werden.
Delphi-Quellcode:
Schau dir mal TObjectList an; das könnte dir nützlich sein.
type
TMeinObjArray = array of TObject; // offenes eindim. Array von Objekten maxX := 100; // zur Laufzeit festlegen maxY := 50; // Speicher besorgen SetLength(meinObjArray, maxX*maxY); // befüllen mit Instanzen for i:= 0 to maxY-1 do for j := 0 to maxX-1 do // da beide Dimensionen offen sind // müssen wir selber rechnen meinObjArray[i*maxX+j] := TGround.Create; // Zugriff auf TGround an Position 13, 40 TGround(meinObjArray[13*maxX+40]).LiftUpTotheSky(....); // Instanzen freigeben for i := 0 to maxX*MaxY-1 do begin TGround(meinObjArray[i]).Free; end; |
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
Zitat:
![]() Meine Idee war damals, dass ich ein Array of TOberklasse erstelle und dann die verschiedenen Unterklassen welche sich von TOberklasse ableiten in der Array speichere. Nur hatte das irgendwie nicht hingehauen. Naja, und ich dache mir das jetzt so: 1. Instanz von einer der Unterklassen erstellen (z.B. TGround, TGrass, etc.) 2. Pointer der Instanz im Array speichern |
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
Ich habe oben noch ein paar kleine Änderungen vorgenommen.
Warum soll das nicht gehen? Gibt es Laufzeit bzw. Compilerer fehler. Übrigens TObject.Create liefert einen Zeiger auf das neue Object. Ich weiß nicht was das mit NewInstance soll. |
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
Zitat:
Delphi-Quellcode:
bekomme ich eine Zugriffsverletzung.
FBufferArray[i][j] := TGround.Create;
|
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
So jetzt probier ich es mal selber!
>>> Gedult! |
Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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 by Thomas Breitkreuz