wann funktioniert __property
-
Hallo,
ich find irgendwie nicht genug infos darüber.
wenn ich folgendes hab:
class Meine_Klasse { ... } class PACKAGE Vcl_klasse : TComponent { ... private: Meine_Klasse *CLKlasse; TFont *FFont; __published: __property Meine_Klasse *Test ={read=CLKlasse, write=CLKlasse}; // das geht nicht __property TFont *Font ={read=FFont, write=FFont}; // das geht }
Bei property Meine_Klasse bekomm ich beim kompilieren den Fehler "Kein Zulässiger Typ".
Mach ich was falsch oder geht das prinzipiell einfach nicht?
-
wenn du die Klassendefinition von Meine_Klasse richtig abschließt funktionierts
class Meine_Klasse { ... }; //<-- Semikolon nicht vergessen
-
Hallo
Nein das fehlende Semikolon behebt das eigentliche Problem nicht. Bei meinem Test zeigte sich, das property außer den PODs nur Datentypen akzeptiert, die von TObject abgeleitet sind. Die Lösung ist also :
class Meine_Klasse : public TObject
bis bald
akari
-
also bei meinem Test gings auch ohne TObject, aber ich habs auch nur als property von TForm versucht und nicht von PACKAGE/TComponent
[Edit]ok, wenn ich das in einer seperaten Klasse wie im gepostete Beispiel versuche gehts in der __published-Sektion nur mit TObject und in public auch ohne
-
Hallo,
es geht auch ohne ableitung einer vcl klasse, ich glaub ich scheiter gerade an dem prototypen meiner klasse.
ich hab die klassen alle in einer header und da die Teilweise aufander zugreifen hab ich den protoypen der klasse oben drüber geschrieben.
Je nach dem in welcher reihenfolge die klassen stehen funktioniert property mal bei der einen mal bei der anderen.
wie sieht der der Protoyp hiervon aus?
class PACKAGE TCanClient : public TComponent { ... } class TCanServerBasis : public TThread { ... } class PACKAGE TCanServer :public TComponent { ... }
eigendlich doch so, oder?
class PACKAGE TCanClient; class TCanServerBasis; class PACKAGE TCanServer;
-
Linnea schrieb:
[Edit]ok, wenn ich das in einer seperaten Klasse wie im gepostete Beispiel versuche gehts in der __published-Sektion nur mit TObject und in public auch ohne
Das ist tatsächlich die Ursache des Problems. __property unterstützt grundsätzlich alle Typen, aber für Deklarationen in der __published-Sektion will der Compiler RTTI generieren, und das geht nur für Delphi-kompatible Typen.