[fpc-pascal] class inheritance and type incompatibility
Xiangrong Fang
xrfang at gmail.com
Fri Sep 27 03:50:53 CEST 2013
2013/9/26 Sven Barth <pascaldragon at googlemail.com>
>
> After change to this code in Clone(), I got this error:
>>
>>
>> tree.pas(66,60) Error: Incompatible type for arg no. 2: Got
>> "TIntTree.TTree$LongInt", expected "TTree"
>>
>
> Seems like a bug in 2.6.x. It's compiling in 2.7.1.
>
I altered the code so that it works in 2.6.2:
=== test program ===
program test;
{$mode objfpc}{$H+}
uses tree;
type
TIntTree = class(specialize TTree<Integer>)
public
function Clone: TIntTree;
end;
function TIntTree.Clone: TIntTree;
begin
Result := TIntTree.Create(Data, FParent);
DoClone(Result);
end;
var
it1, it2 : TIntTree;
begin
it1 := TIntTree.Create(1, nil);
it2 := it1.Clone;
WriteLn(it1.ClassName);
WriteLn(it2.ClassName);
end.
=== tree clone code ===
type
generic TTree<T> = class
... ...
protected
procedure DoClone(Target: TTree);
public
... ...
function Clone: TTree;
... ...
end;
implementation
procedure TTree.DoClone(Target: TTree);
var
node: TTree;
begin
node := FirstChild;
while node <> nil do begin
node.Clone.Remove(Target);
node := node.NextSibling;
end;
end;
function TTree.Clone: TTree;
begin
Result := TTree.Create(Data, FParent);
DoClone(Result);
end;
=======
Is there any problem with this solution?
Regards,
Xiangrong
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130927/d21aa85d/attachment.html>
More information about the fpc-pascal
mailing list