Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung (https://www.delphipraxis.net/213730-innerhalb-einer-klasse-erscheint-bei-dem-property-eine-fehlermeldung.html)

juergen 16. Sep 2023 22:27

Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
 
Hallo zusammen,

ich möchte die "Felder" einer Json-Datei in meine Klasse übernehmen. Das klappt soweit. Allerdings enthält die Json-Datei auch ein Array (string).
Und da weiß ich nicht wie ich das Array in meine Klasse bekomme.

Vereinfachter Code-Versuch:
Delphi-Quellcode:
  TmyClass = class
  private
    myArr: array [1..80] of string;
  public
    constructor Create;
    destructor Destroy; override;
    property myArr:[Idx: Integer]: string read myArr write myArr:
  end;
Hierbei erscheint bei "write" im Editor die Fehlermeldung: "E2008 Inkompatible Typen".

Was mache ich hier falsch?

Vielen Dank schon mal vorab.

Uwe Raabe 16. Sep 2023 22:44

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
 
Array Properties brauchen zwingend einen Getter/Setter.
Delphi-Quellcode:
    property myArr:[Idx: Integer]: string read GetmyArr write SetmyArr:

juergen 16. Sep 2023 23:40

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
 
Ahh ok, vielen Dank Uwe!
Nach dem hinzufügen des Setter/ Getter kommt die selbe Fehlermeldung am abschließenden Semikolon.

Delphi-Quellcode:
  TJsonSettings = CLASS
  PRIVATE
    FShorthandSymbol_Arr ARRAY [1 .. 80] OF STRING;

    PROCEDURE SetShorthandSymbol( CONST Idx: Integer; Value: STRING );
    FUNCTION GetShorthandSymbol( Idx: Integer ): STRING;
  PUBLIC
    CONSTRUCTOR Create;
    DESTRUCTOR Destroy; OVERRIDE;
    PROPERTY ShorthandSymbol[Idx: Integer]: STRING READ GetShorthandSymbol WRITE SetShorthandSymbol; // <=== Hier erscheint "E2008 Inkompatible Typen"
  END;
 
  ...
 
PROCEDURE TJsonSettings.SetShorthandSymbol( CONST Idx: Integer; Value: STRING );
BEGIN
   IF ( Idx >= 0 ) AND ( Idx < Length( FShorthandSymbol_Arr ) ) THEN
     FShorthandSymbol_Arr[Idx] := Value;
END;

FUNCTION TJsonSettings.GetShorthandSymbol( Idx: Integer ): STRING;
BEGIN
  Result := FShorthandSymbol_Arr[Idx];
END;

jaenicke 17. Sep 2023 07:46

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
 
Bei dem Idx ist ein const zu viel oder in der property-Deklaration eins zu wenig (die Deklaration von Idx muss übereinstimmen). Das geht:
Delphi-Quellcode:
    function GetShorthandSymbol(const AIdx: Integer): string;
    procedure SetShorthandSymbol(const AIdx: Integer; const Value: string);

    property ShorthandSymbol[const AIdx: Integer]: string read GetShorthandSymbol write SetShorthandSymbol;
Oder du lässt es überall weg.

Tipp:
Schreib einfach nur:
Delphi-Quellcode:
    property ShorthandSymbol[const AIdx: Integer]: string;
Dann drück Strg + Shift + C und schon wird der Rest automatisch ergänzt.

Olli73 17. Sep 2023 08:21

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
 
Wenn du das Array nur als Feld/Variable deklarierst und das property ganz weg lässt, sollte es auch funktionieren.

juergen 17. Sep 2023 09:07

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
 
Vielen Dank, jetzt funktioniert es.
@jaenicke,
Der Tipp mit Strg + Shift + C hilft mir zukünftig sehr! Genau sowas hatte ich immer vermisst. :dp:

himitsu 17. Sep 2023 10:33

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Delphi-Quellcode:
property ShorthandSymbol: string;

Bei NichtArray-Property erstellen CodeCompletattion und LiveTemplates auch das Feld (die Variable) in der Klasse, falls es noch fehlt.
https://docwiki.embarcadero.com/RADS...oard_Shortcuts


Es gibt auch mehrere Live-CodeTemplates dafür.

Strg+Leerzeichen und "prop" schreiben
"prop" schreiben und dann Strg+Leerzeichen
...
Anhang 56265

Aber leider ist das CodeCompletaion hier einfach nur extrem doof und selbst wenn man etwas genau/komplett schreibt, dann wird das nicht selektiert und steht hier versteckt gaaaaaaaaaaaaaaanz unten, in der Liste. :freak:

oder siehe Menü > Ansicht > Vorlagen
Anhang 56266


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