Pol*_*ial 13 delphi compiler-errors delphi-2009
我在一些Delphi代码中遇到了一些相当不寻常的行为.当使用in
关键字检查项是否在常量数组中时,我得到以下编译错误:
E1012常量表达式违反了子范围边界
常量定义如下:
type TSomeEnum = (seFoo = 1000,
seBar = 2000,
seBoo = 3000,
seFar = 4000,
seFooBar = 5000,
seBooFar = 6000,
seLow = 1000,
seHigh = 6000,
seCount = 6);
Run Code Online (Sandbox Code Playgroud)
失败的行如下:
if someObj.someProperty in [seFoo, seFar, seFooBar] then
...
Run Code Online (Sandbox Code Playgroud)
虽然我理解在这里发布的另一个问题中显示错误背后的原因,但是在使用变量时编译时没有对整数数组进行边界检查,看起来很奇怪,我在使用常量数组时遇到了同样的问题.绝对是在界限范围内.
就目前而言,我已经用包含or
子句的(更大)语句替换了该行.但是,这显然不太理想.任何人都可以解释为什么我会遇到这个问题?
LU *_* RD 23
文档Sets
说:
基类型可以具有不超过256个可能的值,并且它们的顺序必须介于0到255之间.
因此,即使您可以使用任何值的枚举,该if xx in [a,b,c]
语句也会失败,因为一个集合不能保存大于255的值.
改为使用案例陈述:
case xx of
a,b,c : // Make something
end;
Run Code Online (Sandbox Code Playgroud)