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