Hello,

I can confirm this problem. We have experienced it in a project of ours,
and it disappears if the units containing the parent and child class are
compiled in 1 run; we only had it if first the parent class' unit was
compiled, and later the child's class unit.

It appeared with the same type of arguments: ansistring and array of const.

Michael.

On Tue, 3 Aug 2010, Graeme Geldenhuys wrote:

Hi,

I'm trying to apply my final changes to the new Linear IPF writer for
fpdoc. I updated to the latest FPC 2.5.1 today. Did a make clean and build
the whole FPC 2.5.1 for 64-bit Linux - no problems.

I then switched to by fpdoc_ipf branch which is based on the latest FPC
2.5.1 code. Trying to compile fpdoc now with 2.5.1, I get the following
error. This has me stumped. I just can't see what the problem is. Can
anybody shed some light on why I can't override a virtual method?

Error when trying to compile fpdoc.
-----------------------------
Hint: Start of reading config file /home/graemeg/.fpc.cfg
Hint: End of reading config file /home/graemeg/.fpc.cfg
Free Pascal Compiler version 2.5.1 [2010/08/03] for x86_64
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for x86-64
Compiling fpdoc.pp
Compiling dw_ipflin.pas
dw_ipflin.pas(70,15) Error: There is no method in an ancestor class to be
overridden: "TIPFNewWriter.WriteLnF(const AnsiString,const Array Of Const);"
dw_ipflin.pas(161,1) Fatal: There were 1 errors compiling module, stopping

-------------------------------------------


Here is the related code.... The method I want to override in a descendant
class is WriteLnF()

-----------------------[ dwlinear.pp ]-----------------------------
TLinearWriter = Class(TFPDocWriter)
 published
   FStream : TStream;
   PackageName: String;
   Module: TPasModule;
   ModuleName: String;
   FLastURL : DomString;
 protected
   // Writing support.
   procedure Write(const s: String); virtual;
   procedure WriteLn(const s: String); virtual;
   procedure WriteF(const s: String; const Args: array of const); virtual;
   procedure WriteLnF(const s: String; const Args: array of const);
virtual;  //   <<---  ****   The method I want to override later ****
   Function  PushWriteContext(S : TStream) : TStream;
...
------------------------------------------------------


... and here is my new IPF unit which descends from TLinearWriter.

-----------------------[ dw_ipflin.pas ]------------------------------
type
 TIPFNewWriter = class(TLinearWriter)
 private
   InPackageOverview: Boolean;
   InHeading: Boolean;
   FInHeadingText: string;
   OrderedList: boolean;
   procedure FlushBuffer;
 protected
   FLink: String;
   FTableCount : Integer;
   FInVerbatim : Boolean;
   Inlist,
   TableRowStartFlag,
   TableCaptionWritten: Boolean;
   fWrap: boolean;
   fColCount: integer;
   Fline: string;  // line buffer for textwrap support
   // extras
   procedure Write(const s: String); override;
   procedure WriteLn(const s: String); override;
   procedure WriteLnF(const s: String; const Args: array of const);
override;   // <<---- *****   Compiler error is here  ******
   procedure WriteBeginDocument; override;

------------------------------------------------------


Is there some new language rule in FPC 2.5.1 that doesn't allow you to
override virtual methods for some reason?


All units in question have the following defined at the top of each unit.
So it's not a AnsiString vs ShortString issue.

  {$mode objfpc}{$H+}



Regards,
 - Graeme -

--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://opensoft.homeip.net/fpgui/

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to