[Lazarus] Overloading problem (converting Delphi -> FPC)
Sven Barth
pascaldragon at googlemail.com
Thu Nov 4 10:08:50 CET 2010
Am 04.11.2010 10:04, schrieb Birger Jansen:
> Hi all,
>
> While converting a project from Delphi to FPC I stumple upon a problem. I hope some of you can help me with this!
>
> It seems that FPC has problems with finding the right overloaded constructor when the various overloaded functions take class parameters and these classes are related to each other.
>
> An example will make it easier to explain:
>
> ----------------------------------------------------------
> program Project1;
>
> {$APPTYPE CONSOLE}
>
> uses
> Classes, contnrs;
>
> type
> TBase = class(TObject);
> TSubA = class(TBase);
> TSubB = class(TSubA);
>
> TBaseClass = class of TBase;
> TSubAClass = class of TSubA;
>
> { TFunc }
>
> TFunc = class
> public
> constructor Create(const AClass: TSubAClass);overload; {constructor A}
> constructor Create(const AClass: TBaseClass);overload; {constructor B}
> end;
>
> var
> t1, t2, t3: TFunc;
>
> constructor TFunc.Create(const AClass: TSubAClass); {constructor A}
> begin
> end;
>
> constructor TFunc.Create(const AClass: TBaseClass); {constructor B}
> begin
> end;
>
> begin
> t1 := TFunc.Create(TBase);
> t2 := TFunc.Create(TSubA);
> t3 := TFunc.Create(TSubB);
> end.
> ----------------------------------------------------------
>
> This runs in Delphi. For t1, Constructor B is called. For t2 and t3 Constructor A is called. The compiler just takes the 'lowest' possible constructor for t3.
> However, in FPC the compiler doesn't know what constructor to use do and compilation fails with a "Can't determine which overloaded function to call" for t3.
>
> Why doesn't the compiler use the lowest possible constructor for t3? Is there some way to force this?
> This constructor (one of the different overloaded versions) is called from a lot of different places in the code, I hope there is come way to fix this without rewriting it all.
According to your description how Delphi handles it: don't you mean
"highest" possible constructor? The lowest one would be constructor B in
my opinion...
Regards,
Sven
More information about the Lazarus
mailing list