AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi MeineKlasse.MeinArray über Pointer ansprechen?
Thema durchsuchen
Ansicht
Themen-Optionen

MeineKlasse.MeinArray über Pointer ansprechen?

Ein Thema von Nonsense · begonnen am 27. Mär 2004 · letzter Beitrag vom 27. Mär 2004
Antwort Antwort
Benutzerbild von Nonsense
Nonsense

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

MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 19:29
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?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 19:44
Lass den Derefenzierungsoperator (^) weg. Den brauchst du bei Objekten nicht.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 19:54
Zitat von Chewie:
Lass den Derefenzierungsoperator (^) weg. Den brauchst du bei Objekten nicht.
Klappt nicht.
Ich übergebe den Pointer an die Prozedur:
procedure TNeighborhood.CheckNeighborhood([...]; WorldPointer: TWorld); Und will dann auf das Array zugreifen:
WorldPointer.FWorldArray[X + i][Y + j].Number (Der WorldPointer zeigt auf die Instanz von TWorld)
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 19:58
Was geht nicht? Und wie sehen die beteligten Klassen aus? Gib mal ein paar mehr Infos.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 20:04
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'
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 20:25
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.
property WorldArray: TWorldArray read FWorldArray write FWorldArray; falls du auch Schreibzugriff brauchst.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 20:28
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
property WorldArray: array read FWorldArray; logischer Weise nicht funktioniert.
Ich probier's mal. Danke erst einmal.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: MeineKlasse.MeinArray über Pointer ansprechen?

  Alt 27. Mär 2004, 20:39
Ok, ich bin einfach nur beschränkt....Dereferenzieren vergessen.
Danke! Du hast mir echt weitergeholfen!
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:03 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