2009-07-14 26 views
3

這是我的問題 - 前不久:如何同時創建兩個類的實例?

var c1:TClass1; 
c2:TClass2; 
begin 
    c1 := c1.Create; 
    c2 := c2.Create; //<<Exception; 
end; 

兩個類都從TObject.If他們不繼承我就不能使用調試器的類,所以我必須使用TObject的繼承。

我真正的問題是,我必須在第一個類的實例中的函數內部創建第二個類的實例。我無法找到一種方法來釋放第一個類的實例,而我在裏面它。

看來我不能有超過一個從TObject繼承的類,是這樣的問題嗎?

如何解決我的代碼,有什麼建議?

在此先感謝!

+0

沒有編譯器給你一個關於變量或兩個未定義的警告? – 2009-07-15 00:06:38

+0

「看起來我不能有超過一個從TObject繼承的類,是這個問題嗎?」不,僅VCL就有數百個從TObject繼承的類。 「如果他們沒有繼承,那麼我不能在類中使用調試器,所以我必須使用TObject。」不要猜測或幻想,試着理解編譯器輸出並首先修復任何提示和警告。調試器根本無法在您的簡單代碼片段中發現問題。 – mghie 2009-07-15 04:54:02

回答

16

正確的語法應爲:

C1 := TClass1.Create; 
C2 := TClass2.Create; 
4

要擴大skamradt的回答是:

您正試圖創建之前使用您的類。在內部,類是指向類中數據的指針。因此,您正在取消引用未分配的指針。難道你的代碼繁榮了嗎?

0

不要忘記,構造函數做兩個工作。

var c1: TClass1; 
c1 := TClass1.Create; 

將構建類型TClass1的新實例,而

c1.Create; 

重新初始化 C1 - 所有語句在構造函數將執行,但構造函數不會返回新實例。