Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Published-Feld ist weder vom Typ class noch interface?
Wolle92 - So 22.06.08 09:09
Titel: Published-Feld ist weder vom Typ class noch interface?
Hallo,
habe ein Problem bei folgender Deklaration:
Delphi-Quelltext
1: 2: 3:
| type TFieldImage = class(TImage) fieldType: TFieldType; end; |
Ich bekomme immer die Fehlermeldung vom Compiler
"[DCC Fehler] Unit1.pas(12): E2217 Published-Feld 'fieldType' ist weder vom Typ class noch interface"
Kann mir jemand sagen, was ich dagegen tun kann?
Hidden - So 22.06.08 09:23
Kann mir das eigentlich nur so erklären, dass du einen vordefinierten Begriff verwendest. Ansonsten ist ja nichts besonderes an deiner Deklaration.
SvenAbeln - So 22.06.08 12:04
In der Delphi Hilfe zu der Fehlermeldung steht doch die Lösung:
entweder:
Delphi-Quelltext
1: 2: 3: 4:
| type TFieldImage = class(TImage) public fieldType: TFieldType; end; |
oder wenn es wirklich Published sein soll:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TFieldImage = class(TImage) private FFieldType: TFieldType; published Property FieledType: TFieldType read FFieldType write FFieldType; end; |
Yogu - So 22.06.08 12:40
Titel: Re: Published-Feld ist weder vom Typ class noch interface?
Wolle92 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3:
| type TFieldImage = class(TImage) fieldType: TFieldType; end; | |
Du solltest bei Klassen immer eine Sichtbarkeit für
jedes Symbol definieren. Wahrscheinlich übernimmt Delphi sonst diese Einstellung von der abgeleiteten Klasse, und die ist eben
published.
Christian S. - So 22.06.08 12:55
Die Sichtbarkeit für jedes Element zu definieren ist überflüssig. Es ist sehr eindeutig geregelt, welches Element welche Sichtbarkeit erhält:
Delphi Referenz hat folgendes geschrieben: |
Ein Element ohne Attribut erhält automatisch die Sichtbarkeit des vorhergehenden Elements in der Deklaration. Die Elemente am Anfang einer Klassendeklaration ohne explizite Sichtbarkeitsangabe werden standardmäßig als
published deklariert, wenn die Klasse im Status {$M+} compiliert oder von einer mit {$M+} compilierten Klasse
abgeleitet wurde. Andernfalls erhalten sie das Attribut public. |
IMHO würde es sogar der Übersichtlichkeit schaden, wenn man für jedes Element das Attribut dabei hat.
Yogu - So 22.06.08 13:08
Christian S. hat folgendes geschrieben: |
IMHO würde es sogar der Übersichtlichkeit schaden, wenn man für jedes Element das Attribut dabei hat. |
Ich schreibe ja auch nicht vor jedes Symbol dieses Attribut davor, sondern eher in der Art:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TMyClass = class private fField: Integer; fDummy: String; fFoo: array of Boolean;
procedure SetDummy(const Value: String); public property Field: Integer read fField write fField; published procedure DoSomething;
property Dummy: String read fDummy write SetDummy; end; |
Christian S. - So 22.06.08 13:16
Ach so, dann hatte ich Dich falsch verstanden. So ist das ja die in der Referenz auch empfohlene Vorgehensweise :-)
Yogu - So 22.06.08 13:43
Christian S. hat folgendes geschrieben: |
Ach so, dann hatte ich Dich falsch verstanden. So ist das ja die in der Referenz auch empfohlene Vorgehensweise :-) |
Puh, ich dachte schon, ich hätte es die ganze Zeit unsauber gemacht :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!