AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung
Thema durchsuchen
Ansicht
Themen-Optionen

Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

Ein Thema von juergen · begonnen am 16. Sep 2023 · letzter Beitrag vom 17. Sep 2023
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

  Alt 16. Sep 2023, 23:27
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.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

  Alt 16. Sep 2023, 23:44
Array Properties brauchen zwingend einen Getter/Setter.
    property myArr:[Idx: Integer]: string read GetmyArr write SetmyArr:
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

  Alt 17. Sep 2023, 00:40
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;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

  Alt 17. Sep 2023, 08:46
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:    property ShorthandSymbol[const AIdx: Integer]: string; Dann drück Strg + Shift + C und schon wird der Rest automatisch ergänzt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#5

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

  Alt 17. Sep 2023, 09:21
Wenn du das Array nur als Feld/Variable deklarierst und das property ganz weg lässt, sollte es auch funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

  Alt 17. Sep 2023, 10:07
Vielen Dank, jetzt funktioniert es.
@jaenicke,
Der Tipp mit Strg + Shift + C hilft mir zukünftig sehr! Genau sowas hatte ich immer vermisst.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

AW: Innerhalb einer Klasse erscheint bei dem property eine Fehlermeldung

  Alt 17. Sep 2023, 11:33
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
...
screenshot-2023-09-17-112918.jpg

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.

oder siehe Menü > Ansicht > Vorlagen
screenshot-2023-09-17-113250.png
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (17. Sep 2023 um 11:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 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