AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie Array mit Pointern auf Klassen-Instanzen füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Array mit Pointern auf Klassen-Instanzen füllen?

Ein Thema von Nonsense · begonnen am 25. Mär 2004 · letzter Beitrag vom 25. Mär 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#1

Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:21
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:
  TWorld = class
  private
    [ ... ]
    FBufferArray: array of array of Pointer;
  public
    constructor Create(WorldHeight, WorldWidth: Integer);
    [ ... ]
  end;
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
Delphi-Quellcode:
  for i := 0 to FWorldHeight do
    for j := 0 to FWorldWidth do
    begin
      FBufferArray[i][j] := new(TGround.Create);
    end;
schreiben.

Hat jemand eine Idee?

Danke im Voraus.

MfG
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:28
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;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#3

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:30
@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.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:34
Dann tausche TGround durch TObject.

Das ist "so eine Art" Pointer für Klassen, denn wie ich verstanden habe sind es ja 4 Klassen.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:37
Zitat:
FBufferArray: array of array of Pointer;
Das geht sowieso nicht!
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:
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;
Schau dir mal TObjectList an; das könnte dir nützlich sein.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#6

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:37
Zitat von neolithos:
Dann tausche TGround durch TObject.

Das ist "so eine Art" Pointer für Klassen, denn wie ich verstanden habe sind es ja 4 Klassen.
Hatte mein Problem mal vor ein paar Wochen beschreiben, kannst ja mal gucken:
http://www.delphipraxis.net/internal...ct.php?t=19802

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
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#7

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:45
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#8

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 15:59
Zitat von neolithos:
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.
Bei
  FBufferArray[i][j] := TGround.Create; bekomme ich eine Zugriffsverletzung.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#9

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 16:02
So jetzt probier ich es mal selber!

>>> Gedult!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#10

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 16:06
Zitat von neolithos:
So jetzt probier ich es mal selber!

>>> Gedult!
8)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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