[fpc-pascal] Compile error with published field
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:
>>> I have a TPersistent decendant class that causes the following compiling
>>> "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
>> 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
More information about the fpc-pascal