2015-09-05 82 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