![]() |
Ich verstehe das Problem mit dem Sichtbarkeitsattribut nicht ganz
Das hier funktioniert:
Delphi-Quellcode:
Das hier funktioniert nicht:
type
TKlasse1 = class(TObject) FTest: string; end;
Delphi-Quellcode:
Ignorieren wir mal die Frage ob das die feine Art ist, den theoretisch sollte eine Feldvariable auch ohne Sichtbarkeitsattribute funktionieren. Ohne ein Attribut sollte FTest meines wissens nach Public (oder Published) sein.
type
TKlasse2 = class(TStringList) FTest: string; end; Nun habe ich zufällig vergessen ein Sichtbarkeitsattribut in eine Klasse einzufügen, und es knallte. War ich überrascht, denn ich habe mich erinnert, dass ich vor Jahren (am Anfang) eine Klasse schon mal ohne ein Attribut gemacht habe. Und tatsächlich, leite ich die Klasse von TObject wird das akzeptiert, von anderen höheren Klassen nicht. Ich habe da paar Theorien, aber keine wirkliche Erklärung. |
AW: Ich verstehe das Problem mit dem Sichtbarkeitsattribut nicht ganz
Knallt es irgendwo auf dem Flur, oder hast du eine nachvollziehbare Fehlermeldung? :)
Vielleicht gibt es bereits ein FTest in "höheren" Klassen? Eventuell ist etwas anderes falsch geschrieben. Nur mit komplettem Fehlertext, den man übrigens mit F1 dann auch in der Hilfe erklärt bekommt, gerade bei älteren Fehlermeldungen klappt das überraschend gut, kann man eine sichere Aussage machen. Sherlock |
AW: Ich verstehe das Problem mit dem Sichtbarkeitsattribut nicht ganz
"Es knallte" ist so eine wunderbare Fehlerbeschreibung!
Laut ![]() Zitat:
Mein Delphi (XE - bin seit dem glücklich auf Lazarus umgestiegen, daher nichts neueres) "knallt" in dem Sinne, als dass es mir das zweite schlicht nicht kompiliert. Nachtrag: Folgendes knallt dann logischerweise auch:
Code:
type
{$M+} TClass3 = class(TObject) FTest: string; end; |
AW: Ich verstehe das Problem mit dem Sichtbarkeitsattribut nicht ganz
Also die Fehlermeldung lautet:
Code:
Sagt mir aber nicht wirklich viel.
[Fehler] Unit1.pas(26): Das Published-Feld 'FTest' ist weder vom Typ class noch interface
Nachtrag: Danke für den Tipp mit F1, hebe nicht dran gedacht. In der Hilfe steht das:
Code:
Schlauer bin ich trotzdem nicht. Ich sehe den Fehler nicht.
Es wurde versucht, ein Feld in einer Klasse als published zu deklarieren, das weder ein Klassen- noch ein Schnittstellentyp ist.
program Produce; type TBaseClass = class published x : Integer; end; begin end. Dieses Programm verursacht einen Fehler, weil 'x' in einem published-Abschnitt enthalten ist, obwohl 'x' kein Typ ist, der als published deklariert werden kann. program Solve; type TBaseClass = class Fx : Integer; published property X : Integer read Fx write Fx; end; begin end. Sie müssen alle Felder, die keine Klassen- oder Schnittstellentypen sind, aus dem published-Abschnitt einer Klasse löschen. Muss das Feld als published deklariert werden, ändern Sie es in eine Eigenschaft um, so wie es im Beispiel gezeigt wird. |
AW: Ich verstehe das Problem mit dem Sichtbarkeitsattribut nicht ganz
Siehe oben, die Antwort steckt ja schon drin - als published brauchst Du ne property. Spätestens dann brauchst du mindestens ein read oder write, und wenn Du dafür die code completion wählst, fügt er die aktuellen Sichtbarkeitsattribute sogar ein.
Nachtrag: so ![]() |
AW: Ich verstehe das Problem mit dem Sichtbarkeitsattribut nicht ganz
@CCRDude
Ok, das mit {$M+} ist die Erklärung. TStringList ist übrigens von TStrings abgeleitet (bei der ich nachgeguckt habe), aber TStrings ist wiederum von TPersistent abgeleitet (wo ich nicht nachgeguckt habe). Danke euch beiden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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