2011-07-15 75 views
4

當我嘗試編譯單元與Enum類型與在Delphi XE 5000+值I得到這個錯誤如何解決Delphi XE中Enum類型的RTTI大小問題?

[DCC錯誤] uCities.pas(5834):E2575 RTTI關於 'TCity' 過大;用$ RTTI縮小範圍或縮小尺寸

我該如何解決這個問題?

之類的東西

{$WEAKLINKRTTI ON} 
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} 

沒有幫助。

在此先感謝

+0

我目前手頭沒有Delphi XE,但是我成功編譯了Delphi 2010中的10000個值的枚舉。 – kludg

+2

這看起來像是在編寫一個相當可觀的查找表(數據庫) –

回答

1

每梅森惠勒,重構類,以減少類型的大小。把它分成幾個小的。

來源:Embarcadero forums

編輯:在細讀,因爲你處理枚舉,這可能會非常棘手。一種選擇可能是將枚舉值轉換爲整數常量(Const關鍵字)並將過程更改爲使用整數。

+2

哇,我被引用爲RT的權威人士TI一代呢? –

+1

@梅森 - 這是一個很好的答案。 :)無論如何,有多少德爾菲RTTI專家呢? – TrueWill

5

5000+值的枚舉類型不是您手寫的枚舉類型。現在具有5k值的Enum明天將有10k。

您應該修改生成enum的代碼來生成簡單的常量。使用Integer(或Smallint)作爲實際類型。這應該解決它的好處。

+2

他使用Enum列出城市。被翻譯成英語的枚舉的名稱是「TCity」。 –

6

您正在使用枚舉來列出城市?這是新的。

使用查找數據結構比使用枚舉更好。

編輯:如果您進行任何查找(從TCity值獲取城市的字符串名稱),則可以使用TClientDataset或使用TDictionary(來自Generics.Collections單位)。

並幫助這裏的人來幫助你:TCidade將沒有任何意義那些看不懂葡萄牙語,但是與TCity人可以得到關於你的問題是什麼更好的理解。

+0

完成,感謝您的建議。 – Haruki

0

如果一個枚舉中的5k條目是合理的,那麼不要進入討論 - 快速修復是給你的第一枚枚舉項加上= 1。

TCharsetChar = ( csSPACE = 1, csEXCLAMATION_MARK, csQUOTATION_MARK, ...

有時它是值得打破規則 - 。爲節省時間,或表現讓你在這裏

相關問題