E2001 需要序号类型
E2001 Ordinal type required
这里需要Ordinal类型的一些错误,请帮我从下面的代码中检查出来:
摘自评论:
Program Test;
{$APPTYPE CONSOLE}
Type
TResourceSet = set of 0..127;
var
N : TResourceSet;
i : Int64;
begin
i := 127;
N := N + [i]; // E2001 Ordinal type required
end.
64 位类型不能用于集合操作。因此编译器错误 E2001 Ordinal type required
.
我找不到任何关于为什么编译器不允许这样做的文档。 Ordinal Types 中的一些细节指出 Int64
不符合与某些序数函数一起使用的条件。
无论如何,为了使其工作,您可以将类型声明为 Integer
或将您的 64 位整数复制到一个字节。
Program Test;
{$APPTYPE CONSOLE}
Type
TResourceSet = set of 0..127;
var
N : TResourceSet;
i : Int64;
j : Byte;
k := Integer;
begin
i := 127;
j := i;
k := i;
N := N + [j]; // Ok
N := N + [k]; // ok
end.
或者,按照@Andreas 的建议,使用类型转换:
N := N + [Byte(i)];
这里需要Ordinal类型的一些错误,请帮我从下面的代码中检查出来:
摘自评论:
Program Test;
{$APPTYPE CONSOLE}
Type
TResourceSet = set of 0..127;
var
N : TResourceSet;
i : Int64;
begin
i := 127;
N := N + [i]; // E2001 Ordinal type required
end.
64 位类型不能用于集合操作。因此编译器错误 E2001 Ordinal type required
.
我找不到任何关于为什么编译器不允许这样做的文档。 Ordinal Types 中的一些细节指出 Int64
不符合与某些序数函数一起使用的条件。
无论如何,为了使其工作,您可以将类型声明为 Integer
或将您的 64 位整数复制到一个字节。
Program Test;
{$APPTYPE CONSOLE}
Type
TResourceSet = set of 0..127;
var
N : TResourceSet;
i : Int64;
j : Byte;
k := Integer;
begin
i := 127;
j := i;
k := i;
N := N + [j]; // Ok
N := N + [k]; // ok
end.
或者,按照@Andreas 的建议,使用类型转换:
N := N + [Byte(i)];