2011-11-18 56 views
4

我正在將一些傳統的第三方組件從Delphi 6源升級到XE2。Delphi XE2 - 嵌套類函數不編譯

第三方源在類過程中嵌套了類函數。嘲笑準確的工作副本將失敗:

type 
    TMyClass1 = class 
    public 
    class procedure DoSomething; 
    end; 

{ TMyClass1 } 

class procedure TMyClass1.DoSomething; 
    class function DoSomethingelse: boolean; 
    begin 
    result := false; 
    end; 
begin 

end; 

試圖編譯這給出了關於doSomethingelse是一個未聲明的標識符的錯誤。現在我可以(大概)通過將嵌套函數拉出到同一級別來解決這個問題,但是有沒有可以設置的編譯器選項來防止這種情況發生?這是最近發生了什麼變化嗎?有其他人遇到過這個問題嗎?

感謝

+0

也許嵌套函數旁邊不應該有「class」字。如果你螞蟻把它拉起來 - 用「class」關鍵字拉動它,並添加到私人部分。 – Kromster

+0

當我轉移到XE2時,我的代碼庫中的一些第三方代碼遇到了這個問題。最好的解決方案是刪除內部的類。我敢打賭,這個改變是在XE2上面的代碼適用於所有早期版本。 –

+0

@DavidHeffernan此代碼在Delphi XE中也失敗了,所以在Delphi 2007和XE之間的某個版本中進行了更改。 – RRUZ

回答

6

爲了編譯XE2代碼只是刪除class關鍵字DoSomethingelse定義的,即使這個代碼在老版本的Delphi編譯(我測試你的代碼在Delphi 5,第7和2007年)我沒有看到用class關鍵字聲明嵌入式(內部)過程或函數的要點(或差異)。