![]() |
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:
Hierbei erscheint bei "write" im Editor die Fehlermeldung: "E2008 Inkompatible Typen".
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; Was mache ich hier falsch? Vielen Dank schon mal vorab. |
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:
|
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; |
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:
Oder du lässt es überall weg.
function GetShorthandSymbol(const AIdx: Integer): string;
procedure SetShorthandSymbol(const AIdx: Integer; const Value: string); property ShorthandSymbol[const AIdx: Integer]: string read GetShorthandSymbol write SetShorthandSymbol; Tipp: Schreib einfach nur:
Delphi-Quellcode:
Dann drück Strg + Shift + C und schon wird der Rest automatisch ergänzt.
property ShorthandSymbol[const AIdx: Integer]: string;
|
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.
|
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: |
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. ![]() 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