Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer-Eigenschaft einer Klasse: Zugriffsverletzung (https://www.delphipraxis.net/102952-pointer-eigenschaft-einer-klasse-zugriffsverletzung.html)

little-x 7. Nov 2007 14:59

Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
 
@Bommel

Ich bitte vielmals um Entschuldigung. Ich habe mich verguckt. Ich mache es so...

Delphi-Quellcode:
procedure irgendwas;

var vadder: TFahther;
    kind: TChild;
begin
  vadder:=TFahther.Create;
  // irgendwelche Werte an den Vater...

  kind:=TChild(Create); // <- also ich rufe NICHT den Vater-Consrtruktor auf. Diesen Aspekt hatte ich nicht bemerkt vorhin...
  kind.vater:=vadder;            
end;
Womit wir wieder bei 0 anfangen.
Sorry dass Du das jetzt für die Katz erklärt hast...

Bbommel 7. Nov 2007 15:06

Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
 
Ähmm...

Meinst du

Delphi-Quellcode:
kind:=TChild(Create);
oder
Delphi-Quellcode:
kind:=TChild.Create;
Ersteres wäre ja nett, weiß gerade nicht, was das eigentlich machen würde. ;)

Könnte aber der Fehler sein, falls du es wirklich so machst... Ansonsten gehen mir auch die Ideen aus.

Bis denn
Bommel

Muetze1 7. Nov 2007 15:22

Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
 
1. @Object ist was anderes als Pointer(Object)!! Das erste ist die Adresse wo die Instanzenadresse liegt, das zweite ist die Instanzenadresse als Pointer. Letzteres ist das gesuchte, wenn du wirklich Pointer verwenden willst.
2. Wenn du nur Objekte in dieser Eigenschaft ablegen willst, dann nutze TObject als Typ. Damit kannst du auch zur Laufzeit abfragen, was denn nun hinterlegt ist für ein Objekt (IS Operator).
3. Wenn es sich nur um Vater und Kind handelt, dann könntest du im Kind direkt die Eigenschaft von TVater deklarieren (Voraussetzung: das zweite "type" Statement entfernen). Da du aber meintest, dass es unterschiedliche Typen geben kann für die Eigenschaft, dann müssten diese alle von TVater abgeleitet sein.

little-x 7. Nov 2007 15:23

Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
 
Auch hier wieder verguckt.
Natürlich ".Create".

Ok, ich mach schon einige Zeit mit Klassen rum und habe da ziemlich Routine, weshalb ich sowas dann nicht sehe.
Nur das mit den Zeigern DACHTE ich verstanden zu haben, aber dem ist scheinbar doch nicht so.

Habe inzwischen alles probiert: TypeCast, Properties etc....

Ohne Erfolg.

little-x 7. Nov 2007 15:25

Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
 
@Muetze1

Danke für den Tipp, werde es sofort versuchen.

shmia 7. Nov 2007 15:42

Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
 
Zitat:

Zitat von little-x
Delphi-Quellcode:
Type TFather = Class
    vorname: string;
    alter: integer;
end;

Type TChild = Class
    vorname: string;
    alter: integer;
    Vater: Pointer;  // <- hier kommt das Problem; hier soll der Papa rein.
end;

Die Idee mit dem Pointer ist ein Irrweg!!
Das Problem lässt sich einfach mit einer Vorwärtsdeklaration lösen:
Delphi-Quellcode:
Type
 TFather = class; // Vorwärtsdeklaration. Delphi weiss jetzt, es gibt die Klasse

  TChild = Class
    vorname: string;
    alter: integer;
    Vater: TFather;  // ganz einfach so
  end;

  TFather = Class
    vorname: string;
    alter: integer;
  end;
In würde übrigens von TPersistent ableiten, damit man die Objekte auch kopieren kann.

Muetze1 7. Nov 2007 15:45

Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
 
Wozu eine Forward Deklaration, wenn er im Vater nicht das Kind referenziert? Somit einfach den Vater vor dem Kind deklarieren. (siehe mein Beitrag zuvor, Punkt 3)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.
Seite 2 von 2     12   

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