Joao Morais wrote:
Michael Van Canneyt wrote:
On Wed, 15 Nov 2006, Joao Morais wrote:
Hello,
I have a TPersistent decendant class that causes the following compiling
error:
"Only class which are compiled in $M+ mode can be published"
This is the inheritance:
TPersistent (Classes unit)
+-TPressStreamable (PressClasses unit)
+-TPressSubject (PressSubject unit)
+-TPressObject (PressSubject unit)
Am I missing something?
Probably you have a published member in your class which is not a
descendent
of TPersistent. Only TPersistent descendents can be published members
of a
class (which in itself must be a TPersistent descendent).
So, if TPressObject has a published property
Property MyProp : TMyPropClass Read...
then TMyPropClass must also descend from TPersistent.
This is the code:
TPressObject = class(TPressSubject)
_Id: TPressString;
private // <- compiler stops here
...
and this is the inheritance:
TPersistent (Classes unit)
+-TPressStreamable (PressClasses unit)
+-TPressSubject (PressSubject unit)
+-TPressObject (PressSubject unit)
+-TPressAttribute (PressSubject unit)
+-TPressString (PressSubject unit)
I also tried to move the member to the published area; declared the
class under the $M+ directive; but no success. Moving the _Id member to
the private area solves the compilation problem.
The problem is - TPressString is a forward declaration and the compiler
doesn't know that it inherits from TPersistent. Is this the expected
behavior?
Thanks,
--
Joao Morais
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal