From documentation:

If the overload keyword is not present, then all overloaded versions must reside in the same unit, and if it concerns methods part of a class, they must be in the same class, i. e. the compiler will not look for overloaded methods in parent classes if the overload keyword was not specified.

https://www.freepascal.org/docs-html/ref/refse96.html

Regards, Michał.

W dniu 2025-02-07 o 14:23, Maxim Ganetsky via fpc-devel pisze:
Hello.

The following program does not compile, because overloaded AddItem(s: string) method in ancestor is not visible from child class. Is it normal?

program Test;
{$MODE OBJFPC}
type
   TBase = class
   public
     procedure AddItem(s: string; i: integer); virtual;
     procedure AddItem(s: string);
   end;
   TDesc = class(TBase)
   public
     procedure AddItem(s: string; i: integer); override;
   end;

procedure TDesc.AddItem(s: string; i: integer);
begin
   writeln('TDesc(s,a) ', s, ' ', i);
end;
procedure TBase.AddItem(s: string; i: integer);
begin
   writeln('TBase(s,a) ', s, ' ', i);
end;
procedure TBase.AddItem(s: string);
begin
   AddItem(s, 123);
end;

var
   lBase: TBase;
   lDesc: TDesc;
begin
   lBase := TBase.Create;
   lDesc := TDesc.Create;
   lBase.AddItem('test'); // OK
  lDesc.AddItem('test'); // Error: Wrong number of parameters specified for call to "AddItem"
   readln;
end.


--


GM Systems
ul. K.Marksa 9
58-260 Bielawa
tel. +48 694 178 276
http://www.gmsystems.pl/

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to