Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MeineKlasse.MeinArray über Pointer ansprechen? (https://www.delphipraxis.net/19023-meineklasse-meinarray-ueber-pointer-ansprechen.html)

Nonsense 27. Mär 2004 20:29


MeineKlasse.MeinArray über Pointer ansprechen?
 
Hallo,

ich habe 2 Klassen. Eine besitzt ein Array.
Delphi-Quellcode:
  TTestKlasse = class(TObject)
  private
    FTestArray : array of Integer;
  [...]
  end;
Nun möchte ich von der anderen Klasse auf dieses Array zugreifen, ohne aber die Instanz von TTestKlasse zu kennen. Ich dachte mir jetzt, ich übergebe einen Pointer, welcher auf die Instanz von TTestKlasse zeigt.

Das ganze würde dann so aussehen:
Delphi-Quellcode:
(MeinPointer^ := TestKlasse; // Instanz)

[...]

MeinPointer^.FTestArray[x] := ... // Funktioniert nicht
Klappt aber nicht. Ich bekomme ein "Record, object or class type required".

Hat jemand eine Idee?

Chewie 27. Mär 2004 20:44

Re: MeineKlasse.MeinArray über Pointer ansprechen?
 
Lass den Derefenzierungsoperator (^) weg. Den brauchst du bei Objekten nicht.

Nonsense 27. Mär 2004 20:54

Re: MeineKlasse.MeinArray über Pointer ansprechen?
 
Zitat:

Zitat von Chewie
Lass den Derefenzierungsoperator (^) weg. Den brauchst du bei Objekten nicht.

Klappt nicht.
Ich übergebe den Pointer an die Prozedur:
Delphi-Quellcode:
procedure TNeighborhood.CheckNeighborhood([...]; WorldPointer: TWorld);
Und will dann auf das Array zugreifen:
Delphi-Quellcode:
WorldPointer.FWorldArray[X + i][Y + j].Number
(Der WorldPointer zeigt auf die Instanz von TWorld)

Chewie 27. Mär 2004 20:58

Re: MeineKlasse.MeinArray über Pointer ansprechen?
 
Was geht nicht? Und wie sehen die beteligten Klassen aus? Gib mal ein paar mehr Infos.

Nonsense 27. Mär 2004 21:04

Re: MeineKlasse.MeinArray über Pointer ansprechen?
 
Zitat:

Zitat von Chewie
Was geht nicht? Und wie sehen die beteligten Klassen aus? Gib mal ein paar mehr Infos.

Ok.
Wir hätte da die TWorld-Klasse:
Delphi-Quellcode:
  TWorld = class(TObject)
  private
    FWorldArray : array of array of TCreature;
    [...]
  end;
Auf das FWorldArray möchte ich zugreifen, nämlich mit der TNeighborhood-Klasse:

Delphi-Quellcode:
  TNeighborhood = class(TObject)
  private
    FCreature   : ^TCreature;
    [...]
  public
    [...]
    procedure CheckNeighborhood(X, Y: Integer; WorldPointer: TWorld);
    [...]
  end;
Ich dachte mir, ich übergebe den Pointer (welcher auf die Instanz von TWorld zeigt) an die Prozedur "CheckNeighborhood".
Delphi-Quellcode:
procedure TNeighborhood.CheckNeighborhood(X, Y: Integer; WorldPointer: TWorld);
[...]
begin

[...]
        case WorldPointer.FWorldArray[X + i][Y + j].Number of
          0: begin
               New(FCreature);
               FCreature := WorldPointer.FWorldArray[X + i][Y + j];
               FListSand.Add(FCreature);
             end;
[...]
end;
Kannst du damit was anfangen?
Achso, hab ich vergessen: der Fehler kommt bei "WorldPointer.FWorldArray".
[Error] Undeclared identifier: 'FWorldArray'

Chewie 27. Mär 2004 21:25

Re: MeineKlasse.MeinArray über Pointer ansprechen?
 
Sind die beiden Klassen in der selben Unit deklariert? FWorldArray ist nämlich private. Auf private-Elemente kann nur innerhalb der eigenen Klasse und innerhalb der Unit zugegriffen werden. Wenn die beiden Klassen in unterschiedlichen Units liegen, dann musst du das WorldArray entweder public machen oder besser ein öffentliches Property erstellen:
Delphi-Quellcode:
type
  TWorldArray: array of array of TCreature;

  [...]
  TWorld = class(TObject)
    [...]
  public
    property WorldArray: TWorldArray read FWorldArray;
  [...]
bzw.
Delphi-Quellcode:
property WorldArray: TWorldArray read FWorldArray write FWorldArray;
falls du auch Schreibzugriff brauchst.

Nonsense 27. Mär 2004 21:28

Re: MeineKlasse.MeinArray über Pointer ansprechen?
 
Nein, TNeighborhood und TWorld liegen in verschiedenen Units.
So macht man das also - ich hab die ganz Zeit schon versucht, ein funktionierendes Property mit dem WorldArray hinzukriegen, da
Delphi-Quellcode:
property WorldArray: array read FWorldArray;
logischer Weise nicht funktioniert.
Ich probier's mal. Danke erst einmal.

Nonsense 27. Mär 2004 21:39

Re: MeineKlasse.MeinArray über Pointer ansprechen?
 
Ok, ich bin einfach nur beschränkt....Dereferenzieren vergessen.
Danke! Du hast mir echt weitergeholfen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 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