当我尝试在Delphi XE中编译具有5000+值的Enum类型的单元时出现此错误
[DCC错误] uCities.pas(5834):'TCity'的E2575 RTTI太大;使用$ RTTI缩小范围或减小类型大小
我该如何解决这个问题?
像
这样的事情{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
没有帮助。
提前致谢
答案 0 :(得分:6)
您正在使用枚举列出城市???那是新的。
使用查找数据结构比使用枚举更好。
编辑:您可以使用,例如,TClientDataset,或者您可以使用TDictionary(来自Generics.Collections单位),如果您进行任何类型的查找(从TCity值获取城市的字符串名称)。
并帮助此处的人们帮助您: TCidade
对那些看不懂葡萄牙语的人有任何意义,但TCity
人可以更好地了解你的问题是什么。
答案 1 :(得分:5)
具有5000+值的Enum类型不是您手工编写的Enum。现在有5k值的Enum明天会有10k。
您应该修改生成枚举的代码,以生成简单的常量。使用Integer(或Smallint)作为实际类型。这应该是好的。
答案 2 :(得分:1)
Per Mason Wheeler,重构该类以减小类型大小。把它分成几个较小的。
编辑:仔细阅读,这可能是棘手的,因为你正在处理枚举。一个选项可能是将枚举值转换为整数常量(Const关键字)并更改过程以使用整数。
答案 3 :(得分:0)
如果枚举中的5k条目合理,则不进行讨论 - 快速修复是将= 1添加到第一个枚举项。
TCharsetChar = ( csSPACE = 1, csEXCLAMATION_MARK, csQUOTATION_MARK, ...
有时打破规则是值得的 - 节省时间或提高性能。所以你在这里。