2015-09-05 62 views
1

我一直在努力AVL树单元,其中用户可以指定他希望有树的里面是什么。我为此使用对象。在我的单元中,我定义了名为Node的父对象,并且指向此对象的指针是PTNode。在这个对象中,我有3个属性:Balance:integer; Left,Right:节点的子节点的PTNode,以及1个方法:Function Is_Greater(Node1:PTNode):虚拟和抽象的整数。这是留给用户来定义这个函数(我不知道它会是字符或整数等)。摘要功能帕斯卡尔

我试图测试这个单元,我穿过一个问题就来了。我创建了我的对象的子对象节点名为Object1 = Object(Node)并添加了一个属性X:integer,我想定义函数Is_Greater。这里是代码的声明,部分:这个我名单后

单位

Unit Tree; 
    interface 
    type PTNode=^Node; 
     Node=object 
      Left,Right:PTNode;  
      Balance:integer; 
      Function Is_Greater(Node1:PTNode):integer; virtual; abstract; 
      end; 

和落实在我单位这不是我的问题,相关的功能。

这是我的测试程序:

Program Test; 
uses Tree; 
    Type PTObject=^Object1; 
    Object1=object(Node) 
    X:integer; 
    Function Is_Greater(Node1:PTNode):integer; virtual; 
    end; 
Function Object1.Is_Greater(Node1:PTNode):integer; 
    begin 
    if X>Node1^.X then Is_Greater:=1 
    else if X<Node1^.X then Is_Greater:=-1 
    else Is_Greater:=0; 
end; 

,这让我错误说是X不是目标节点的一部分。但是,当我尝试设置Node1:PTObject时,它给了我错误,我的功能不匹配其父。我不知道如何解决这个问题。

+0

我很高兴看到这样的老同学。不是一个笑话,真的。但是,如果你需要一个完整的AVL树实现,那么它已经在FCL中完成了:[AVL树](http://wiki.lazarus.freepascal.org/AVL_Tree)。 – Abelisto

+1

我意识到这一点,但这是一个学校项目 – ratrt13

回答

1

你需要类型转换的参数Node1

if X>PTObject(Node1)^.X then Is_Greater:=1 
else if X<PTObject(Node1)^.X then Is_Greater:=-1 
else Is_Greater:=0; 
+1

非常感谢! – ratrt13