[fpc-pascal] Compile error with published field

Joao Morais post at joaomorais.com.br
Wed Nov 15 18:09:23 CET 2006


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.

Hints? Anyway I'll perform some tests under Linux in a couple of hours.

Thank you,
--
Joao Morais



More information about the fpc-pascal mailing list