Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler beim Beschreiben eines Records (https://www.delphipraxis.net/66554-fehler-beim-beschreiben-eines-records.html)

WoTo 31. Mär 2006 11:44


Fehler beim Beschreiben eines Records
 
Hallo zusammen,
ich habe mir wie folgt eine Klasse deklariert:

Delphi-Quellcode:
TTriggerBehavior = record
                       MemoPosition : integer;
                       Count : integer;
                     end;
TTrigger = class(TObject)
  private
    .
    .
    .
    FBehavior: TTriggerBehavior;
  public
    .
    .
    .
    property Behavior : TTriggerBehavior read FBehavior write FBehavior;
  end;
Und nun möchte ich folgende Anweisung ausführen:
Delphi-Quellcode:
ATrigger.Behavior.Count := ATrigger.Behavior.Count +1;
wobei ATrigger vom Typ TTrigger ist.

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

mkinzler 31. Mär 2006 11:46

Re: Fehler beim Beschreiben eines Records
 
Versuchs mal mit setter-Methode.

WoTo 31. Mär 2006 11:50

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

mkinzler 31. Mär 2006 11:58

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;

WoTo 31. Mär 2006 12:07

Re: Fehler beim Beschreiben eines Records
 
Vielen Dank !

Hatte den Begriff "setter" nicht richtig verstanden. :shock:

Jetzt geht es ! :bounce1:

Gruß Woto

ste_ett 31. Mär 2006 12:09

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;

Hawkeye219 31. Mär 2006 12:32

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:
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;
Dann sind folgende Anweisungen möglich:

Delphi-Quellcode:
aTrigger.Behavior.MemoPosition := 1;

Inc (aTrigger.Behavior.Count);

aTrigger.Behavior^ := aBehavior;
Gruß Hawkeye

WoTo 1. Apr 2006 09:42

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

Khabarakh 1. Apr 2006 10:21

Re: Fehler beim Beschreiben eines Records
 
Zitat:

Zitat von WoTo
Ich kann mir das mit den ^ und @ einfach nicht merken, mal ist es vor dem Ausdruck, mal dahinter.

Eigentlich nicht wirklich kompliziert, wenn du es dir einmal in das Gedächtnis gerammt hast:
Zitat:

Zitat von Khabarakh
^ = 1. (Präfix, unär) Deklaration eines Zeigertyps
2. (Postfix, unär) Dereferenzierung eines Zeigers

@ = (Präfix, unär) Addresse eines Ausdrucks

Zitat:

Vielleicht würde ich mir es besser merken können, wenn ich einmal in C++ programmiert hätte. :?:
Vielleicht, aber reines Pascal-Wissen ist vollkommen ausreichend.

Cöster 19. Mär 2007 21:06

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 11:22 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