The below example throws a compile error... Technical correct, well...
(doesn't matter which of the 2 intf I use as return type...)

Also, same when doing (in the 2 interfaces / yes override compiles with inherited return type)
    function GetFoo: TIntfFooBase; virtual;
    function GetFoo: TIntfFoo; override;

TIntFoo covers all that is TintFooBase => so that should/could cover the requirement?

Is that error by indent (for which reason)?
Or by oversight?


In any case, how can it actually be added?
- Obviously I can not have 2 identical functions with just a different return type.
- I could do:
    function BaseGetFoo: TIntfFooBase;
    function TIntfBarBase.GetFoo = BaseGetFoo;

But that only compiles if I do add both interfaces:
   TMyClass = class(TObject, TIntfBar, TIntfBarBase)
And then I still get the error about the missing method.


Neither does this work.
    function GetFoo: TIntfFoo;
    function BaseGetFoo: TIntfFooBase;
    function TIntfBar.GetFoo = BaseGetFoo;
Which then gives (the reintroduced method is now missing / of course, since the other is forced) project1.lpr(24,14) Error: No matching implementation for interface method "GetFoo:TIntfFoo;" found

and neither (same error / no error about setting the intf method twice)
  TMyClass = class(TObject, TIntfBar)
    function NewGetFoo: TIntfFoo;
    function BaseGetFoo: TIntfFooBase;
    function TIntfBar.GetFoo = NewGetFoo;
    function TIntfBar.GetFoo = BaseGetFoo;
  end;



program Project1;
{$Mode objfpc}{$Interfaces CORBA}
type

  TIntfFooBase = interface
  end;
  TIntfFoo = interface(TIntfFooBase)
  end;

  TIntfBarBase = interface
    function GetFoo: TIntfFooBase;
  end;
  TIntfBar = interface(TIntfBarBase)
    function GetFoo: TIntfFoo; reintroduce;
  end;

  // project1.lpr(21,14) Error: No matching implementation for interface method "GetFoo:TIntfFooBase;" found
  TMyClass = class(TObject, TIntfBar)
    function GetFoo: TIntfFoo;
  end;

function TMyClass.GetFoo: TIntfFoo;
begin
  //
end;

begin
end.

_______________________________________________
fpc-devel maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to