[fpc-pascal] Compile error with published field

Joao Morais post at joaomorais.com.br
Sat Nov 18 00:52:47 CET 2006


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



More information about the fpc-pascal mailing list