Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
@Bommel
Ich bitte vielmals um Entschuldigung. Ich habe mich verguckt. Ich mache es so...
Delphi-Quellcode:
Womit wir wieder bei 0 anfangen.
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; Sorry dass Du das jetzt für die Katz erklärt hast... |
Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
Ähmm...
Meinst du
Delphi-Quellcode:
oder
kind:=TChild(Create);
Delphi-Quellcode:
Ersteres wäre ja nett, weiß gerade nicht, was das eigentlich machen würde. ;)
kind:=TChild.Create;
Könnte aber der Fehler sein, falls du es wirklich so machst... Ansonsten gehen mir auch die Ideen aus. Bis denn Bommel |
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. |
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. |
Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
@Muetze1
Danke für den Tipp, werde es sofort versuchen. |
Re: Pointer-Eigenschaft einer Klasse: Zugriffsverletzung
Zitat:
Das Problem lässt sich einfach mit einer Vorwärtsdeklaration lösen:
Delphi-Quellcode:
In würde übrigens von TPersistent ableiten, damit man die Objekte auch kopieren kann.
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; |
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. |
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