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

Reply via email to