![]() |
MeineKlasse.MeinArray über Pointer ansprechen?
Hallo,
ich habe 2 Klassen. Eine besitzt ein Array.
Delphi-Quellcode:
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.
TTestKlasse = class(TObject)
private FTestArray : array of Integer; [...] end; Das ganze würde dann so aussehen:
Delphi-Quellcode:
Klappt aber nicht. Ich bekomme ein "Record, object or class type required".
(MeinPointer^ := TestKlasse; // Instanz)
[...] MeinPointer^.FTestArray[x] := ... // Funktioniert nicht Hat jemand eine Idee? |
Re: MeineKlasse.MeinArray über Pointer ansprechen?
Lass den Derefenzierungsoperator (^) weg. Den brauchst du bei Objekten nicht.
|
Re: MeineKlasse.MeinArray über Pointer ansprechen?
Zitat:
Ich übergebe den Pointer an die Prozedur:
Delphi-Quellcode:
Und will dann auf das Array zugreifen:
procedure TNeighborhood.CheckNeighborhood([...]; WorldPointer: TWorld);
Delphi-Quellcode:
(Der WorldPointer zeigt auf die Instanz von TWorld)
WorldPointer.FWorldArray[X + i][Y + j].Number
|
Re: MeineKlasse.MeinArray über Pointer ansprechen?
Was geht nicht? Und wie sehen die beteligten Klassen aus? Gib mal ein paar mehr Infos.
|
Re: MeineKlasse.MeinArray über Pointer ansprechen?
Zitat:
Wir hätte da die TWorld-Klasse:
Delphi-Quellcode:
Auf das FWorldArray möchte ich zugreifen, nämlich mit der TNeighborhood-Klasse:
TWorld = class(TObject)
private FWorldArray : array of array of TCreature; [...] end;
Delphi-Quellcode:
Ich dachte mir, ich übergebe den Pointer (welcher auf die Instanz von TWorld zeigt) an die Prozedur "CheckNeighborhood".
TNeighborhood = class(TObject)
private FCreature : ^TCreature; [...] public [...] procedure CheckNeighborhood(X, Y: Integer; WorldPointer: TWorld); [...] end;
Delphi-Quellcode:
Kannst du damit was anfangen?
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; Achso, hab ich vergessen: der Fehler kommt bei "WorldPointer.FWorldArray". [Error] Undeclared identifier: 'FWorldArray' |
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:
bzw.
type
TWorldArray: array of array of TCreature; [...] TWorld = class(TObject) [...] public property WorldArray: TWorldArray read FWorldArray; [...]
Delphi-Quellcode:
falls du auch Schreibzugriff brauchst.
property WorldArray: TWorldArray read FWorldArray write FWorldArray;
|
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:
logischer Weise nicht funktioniert.
property WorldArray: array read FWorldArray;
Ich probier's mal. Danke erst einmal. |
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