2011-07-15 36 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, ...

有时它是值得打破规则 - 。为节省时间,或表现让你在这里

相关问题