![]() |
Fehler beim Beschreiben eines Records
Hallo zusammen,
ich habe mir wie folgt eine Klasse deklariert:
Delphi-Quellcode:
Und nun möchte ich folgende Anweisung ausführen:
TTriggerBehavior = record
MemoPosition : integer; Count : integer; end; TTrigger = class(TObject) private . . . FBehavior: TTriggerBehavior; public . . . property Behavior : TTriggerBehavior read FBehavior write FBehavior; end;
Delphi-Quellcode:
wobei ATrigger vom Typ TTrigger ist.
ATrigger.Behavior.Count := ATrigger.Behavior.Count +1;
Bei einem Compileversuch kommt die Fehlermeldung: der linken Seite kann nichts zugewiesen werden ! Sehe ich den Wald vor lauter Bäumen nicht mehr oder warum geht das nicht ? :gruebel: Gruß Woto |
Re: Fehler beim Beschreiben eines Records
Versuchs mal mit setter-Methode.
|
Re: Fehler beim Beschreiben eines Records
Hallo,
vielen Dank für die Antwort, aber was bedeutet "setter-Methode". Ich kenne dies nicht. Vielleicht kannst du mir ein kleines Beispiel geben. :P |
Re: Fehler beim Beschreiben eines Records
Delphi-Quellcode:
TTriggerBehavior = record
MemoPosition : integer; Count : integer; end; TTrigger = class(TObject) private . . . FBehavior: TTriggerBehavior; public procedure SetTriggerBehavior( value: TTriggerbehavior); . . . published property Behavior : TTriggerBehavior read FBehavior write setTriggerBehavior; end; ... procedure TTrigger.setTriggerBehaviour( value: TTriggerBehavoir); begin FBehaviour := Value; // oder FBehavoiur.MemoPosition := value.MemoPosition; ... end; |
Re: Fehler beim Beschreiben eines Records
Vielen Dank !
Hatte den Begriff "setter" nicht richtig verstanden. :shock: Jetzt geht es ! :bounce1: Gruß Woto |
Re: Fehler beim Beschreiben eines Records
Du darfst schreibend auf "FBehavior" zugreifen, aber nicht auf "FBehavior.Count";
Entweder du schreibst die Setter-Methoden (wie oben erwähnt) oder du schreibst den kompletten Record neu. Bsp.:
Delphi-Quellcode:
procedure DoSomething;
var ATrigger: TTrigger; TempBehavior: TTriggerBehavior; begin ATrigger := TTrigger.Create; TempBehavior.Count := ATrigger.Behavior.Count +1; TempBehavior.MemoPosition := ATrigger.Behavior.MemoPosition; ATrigger.Behavior := TempBehavior; ATrigger.Free; end; |
Re: Fehler beim Beschreiben eines Records
Hi,
Du könntest Dein Objekt auch so umstellen, daß es einen Zeiger auf den Record zurückliefert:
Delphi-Quellcode:
Dann sind folgende Anweisungen möglich:
TYPE
PTriggerBehavior = ^TTriggerBehavior; TTriggerBehavior = record MemoPosition : integer; Count : integer; end; TTrigger = class(TObject) private FBehavior: TTriggerBehavior; function GetBehavior: PTriggerBehavior; public property Behavior: PTriggerBehavior read GetBehavior; end; function TTrigger.GetBehavior: PTriggerBehavior; begin Result := @FBehavior; end;
Delphi-Quellcode:
Gruß Hawkeye
aTrigger.Behavior.MemoPosition := 1;
Inc (aTrigger.Behavior.Count); aTrigger.Behavior^ := aBehavior; |
Re: Fehler beim Beschreiben eines Records
Hallo zusammen,
ich möchte mich für die vielen Vorschläge bedanken. :bounce1: Der letzte Vorschlag mit Zeigern zu operieren, gefällt mir am besten. Ich wäre im Leben nicht auf diese Möglichkeit gekommen, da ich mit Zeigern auf dem Kriegsfuß stehe. :roll: Ich kann mir das mit den ^ und @ einfach nicht merken, mal ist es vor dem Ausdruck, mal dahinter. Vielleicht würde ich mir es besser merken können, wenn ich einmal in C++ programmiert hätte. :?: Naja, nichts desto trotz : Vielen Dank ! :hi: Gruß Woto |
Re: Fehler beim Beschreiben eines Records
Zitat:
Zitat:
Zitat:
|
Re: Fehler beim Beschreiben eines Records
@mkinzler: Inwiefern löst dein Vorschlag das Problem? So können die Record-Felder doch immer noch nicht direkt beschrieben werden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 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-2025 by Thomas Breitkreuz