[lazarus] Possible compiler bug with derived classes?
Marc Weustink
Marc.Weustink at cuperus.nl
Thu Nov 4 06:18:21 EST 1999
+ From: Chris Storah [mailto:cstorah at emis-support.demon.co.uk]
+ Just found a piece of code that may or may not clarify things:
+ (TField sample in the Delphi help)...
+
+ Problem is not limited to variables - constructors have the
+ same problem if
+ the parameters names conflict.
+
+ The compiler gets conflicts for FNAME, X anf Y, but not Value
+ - why has
+ Value got through, as it's name is re-used?
Value is private. Private parts are (supposed to be) invisible to
descendants. So you may use the name again since it is not known.
Marc
+
+ Cheers,
+ Chris.
+
+ {================================}
+ TField = class
+ private
+ X, Y, Len: Integer;
+ FName: String;
+ public
+ constructor Copy(F: TField);
+ constructor Create(FX, FY, FLen: Integer; FName: String);
+ destructor destroy; override;
+ procedure Display; virtual;
+ procedure Edit; dynamic;
+ protected
+ function GetStr: String; virtual;
+ function PutStr(S: String): Boolean; virtual;
+ private
+ procedure DisplayStr(X, Y: Integer; S: String);
+ public
+ property Name: String read GetStr write Buffer;
+ end;
+
+
+ TStrField = class(TField)
+ private
+ Value: PString;
+ public
+ constructor Create(FX, FY, FLen: Integer; FName: String);
+ destructor Destroy; override;
+ protected
+ function GetStr: String; override;
+ function PutStr(S: String): Boolean; override;
+ end;
+
+ TNumField = class(TField)
+ private
+ Value, Min, Max: Longint;
+ public
+ constructor Create(FX, FY, FLen: Integer; FName: String;
+ FMin, FMax: Longint);
+ function GetStr: String; override;
+
+ function PutStr(S: String): Boolean; override;
+ function Get: Longint;
+ procedure Put(N: Longint);
+ end;
+
+ {===================================================}
+
+
+ -----Original Message-----
+ From: Michael Van Canneyt [mailto:michael.vancanneyt at wisa.be]
+ Sent: 04 November 1999 09:32
+ To: Lazarus (E-mail)
+ Subject: Re: [lazarus] Possible compiler bug with derived classes?
+
+
+
+
+ On Thu, 4 Nov 1999, Chris Storah wrote:
+
+ > I am having problems when compiling a derived class (WinNT version).
+ > This is the code:
+ >
+ > TVer1 = class(TObject)
+ > protected
+ > rec: TObject;
+ > end;
+ >
+ > TVer2 = class(TVer1)
+ > protected
+ > rec: TObject; <=== duplicate identifier
+ > end;
+ >
+ >
+ > The error using ppc386 is 'Error: Duplicate identifier REC'.
+
+ This IS an error; if you declare such a thing in the protected
+ part, you should rename it. How is the compiler supposed to
+ know in a descendent class which one to take ? Any decision will
+ be necessarily an arbitrary one.
+
+ > Is this a known bug?
+ > If so, anyone know how to fix it without changing the
+ identifier names
+ > (Delphi works with the above code).
+
+ Delphi has other strange quircks; Can you tell me WHICH rec it takes
+ when you refer to it ?
+
+ I agree that for the sake of compatibility, we should accept
+ this, but it is
+ simply bad programming to do this, so this is not a priority.
+
+ Michael.
+
+ _________________________________________________________________
+ To unsubscribe: mail lazarus-request at miraclec.com with
+ "unsubscribe" as the Subject
+ archives at http://www.miraclec.com/list_archives/lazarus
+
+ _________________________________________________________________
+ To unsubscribe: mail lazarus-request at miraclec.com with
+ "unsubscribe" as the Subject
+ archives at http://www.miraclec.com/list_archives/lazarus
+
More information about the Lazarus
mailing list