On Fri, 17 Nov 2006, Joao Morais wrote:
> 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? Yes. The compiler has no idea that _Id is publishable, and therefor rejects it. Michael. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal