[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