Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Setmethode einer Property (https://www.delphipraxis.net/47527-problem-mit-setmethode-einer-property.html)

malo 12. Jun 2005 15:12


Problem mit Setmethode einer Property
 
Anschließend an das gestrige Problem, kommt nun wieder eines mit der Property.

Ich habe eine Property, die so aussieht:

Delphi-Quellcode:
property OperatorChars: TCharArray read fOperatorChars write SetOperatorChars;
fOperators ist vom Typ TCharArray, was ein array of char ist.

Die Prozedur SetOperatorChars sieht folgendermaßen aus:

Delphi-Quellcode:
procedure TTokens.SetOperatorChars(Index: integer; Value: char);
begin
  if (Index > -1) and (Index <= high(fOperatorChars)) then
    fOperatorChars[Index] := Value
  else if Index = high(fOperatorChars) + 1 then
    AddOperatorChar(value);
end;
AddOperatorChar macht übrigens nichts anderes, als Speicher für das Array zu reservieren und dann einen neuen Array-Index zu beschreiben.

Ich bekomme jetzt bei der Property den Fehler "Inkompatible Typen". Wenn ich die SetOperatorChars-Methode durch die Feldvariable fOperatorChars ersetze, funktioniert es. Allerdings möchte ich das in einer Methode haben, damit ich den Speicher vernünftig reservieren kann, ohne jedes mal erneut SetLength aufzurufen ;)

SirThornberry 12. Jun 2005 15:16

Re: Problem mit Setmethode einer Property
 
ist ja klar, schließlich schreibst du in deinem property das es sich um den Typ "TCharArray" handelt aber deine setMethode erwartet kein "TCharArray" sondern ein "Integer" und ein "char". Wenn du unbedingt eine Setmethode brauchst dann wirst du die andere Variante von gestern nehmen müssen.
Delphi-Quellcode:
property OperatorChars[Index: Integer]: Char read GetMethode write SetMethode;
wobei die GetMethode eine Funktion sein muss welche einen Integer erwartet und einen Char zurück gibt. Und die SetMethode muss eine Procedure sein welche als ersten Parameter einen Integer erwartet und als zweiten einen Char.

malo 12. Jun 2005 15:40

Re: Problem mit Setmethode einer Property
 
Folgende Probleme:

1. Wenn ich statt der Getmethode nur die Feldvariable in der Property angebe, bekomme ich den Fehler "inkompatible Typen: Char und Procedure". Aber mit der Getmethode hab ich auch ein paar Probleme...

Der Funktionskopf:

Delphi-Quellcode:
function GetOperatorChars(Index: Integer; Value: char): char;
Wie muss der richtig sein?


2. Ich brauche in meinem Programm hin und wieder die Größe des Arrays. Vorher konnte ich mit high() auf die Feldvariable zugreifen. Aber bei der Property erwartet Delphi unbedingt einen Index, welcher jedoch imho bei High() nicht nur überflüssig, sondern auch falsch wäre. :?

Bei SetLength gibt es ähnliche Probleme ;)

jfheins 12. Jun 2005 15:49

Re: Problem mit Setmethode einer Property
 
Für den Getter schau mal hier: ;)
http://www.delphipraxis.net/internal...ct.php?t=34754

malo 12. Jun 2005 15:59

Re: Problem mit Setmethode einer Property
 
Zitat:

Zitat von jfheins

:wall: Sowas wollte ich nicht machen, weil ich gedacht hab, das wär dann ein 2-dimensionales Array (wie man es mir gestern gesagt hat). Aber grade fällt mir auf, dass ja der Typ, den die Property zurückgibt, kein Array ist, und das damit gemeint war ;)

Aber mit den Parametern hast du recht, danke ;)

SirThornberry 12. Jun 2005 16:17

Re: Problem mit Setmethode einer Property
 
Zitat:

Zitat von malo
Der Funktionskopf:
Delphi-Quellcode:
function GetOperatorChars(Index: Integer; Value: char): char;
Wie muss der richtig sein?

ein Post weiter oben hab ich es doch geschrieben gehabt
Zitat:

Zitat von SirThornberry
...wobei die GetMethode eine Funktion sein muss welche einen Integer erwartet und einen Char zurück gibt...

aber du übergibst ja einen integer + einen char und gibst einen char zurück


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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