2010-01-26 90 views
7

我在Delphi 2010中完全無法獲得類聲明。我已閱讀文檔,在網上閱讀,也許我是個白癡,但是,我無法得到任何東西來編譯。任何幫助將大量讚賞!無法在Delphi 2010中使用轉發類聲明

我敲了這兩個米老鼠類。當然我知道他們需要構造函數等來實際工作,它只是我遇到的問題的演示。

我有類MyParent其中包含我的其他類MyChild的TList。沒關係。但是在MyChild裏面,我希望能夠設置對其父對象的引用,而不是TList,而是MyParent類。

unit ForwardClassDeclarationTest; 

interface 

uses generics.collections;   

type 
    MyChild = Class 
    private 
    ParentObect:MyParent; <--I need to be able to make this accessable 
    public 
End; 

type 
    MyParent = Class 
    public 
    tlChildren:TList<MyChild>; 
End; 

implementation 

end. 

我需要這兩個類之前創建一個向前聲明,但我完全無法得到任何東西去。預先感謝任何傾向於幫助我的人。

回答

13

@csharpdefector試試這個代碼

uses 
    Generics.Collections; 

type 
    MyParent = Class; // This is a forward class definition 

    MyChild = Class 
    private 
    ParentObect:MyParent; 
    public 
    End; 

    MyParent = Class // The MyParent class is now defined 
    public 
    tlChildren:TList<MyChild>; 
    end; 

implementation 

end. 

更多信息,你可以看到這個linkdelphibasics

+1

是的,謝謝你!我沒有把兩個類放在同一個類型語句中。 – csharpdefector 2010-01-26 01:45:14

+1

@Jim:他們需要使用相同的_type_關鍵字,否則會遇到「未完全定義」的編譯器錯誤。見梅森答案。 – 2010-01-26 06:53:09

+0

@保羅是的,你是對的。我會收回我的評論。 – 2010-01-26 23:05:21

13

之前宣佈MyChild,放:MyParent = class;然後聲明MyChild。然後正確地聲明MyParent。並且不要重複使用類型關鍵字。它表示一個類型聲明塊,而不是一個單獨的類型聲明,而類前向聲明​​只能在同一個塊內工作。

+0

謝謝梅森,我明白了。我沒有把你的兩個課都放在你提到的同一個模塊裏。 – csharpdefector 2010-01-26 02:06:30