例如我有枚举
const
MY_FIRST = 1;
MY_SECOND = 2;
MY_THIRD = 3;
type
TMyEnum = MY_FIRST .. MY_THIRD;
我的功能就像
procedure DoSomething(var _type: TMyEnum);
我应该将integer
作为TMyEnum
传递给我。
通过做
var
some_int_value: integer;
begin
DoSomething(TMyEnum(some_int_value));
我有错误[DCC Error] : E2197 Constant object cannot be passed as var parameter
。怎么解决这个问题?
答案 0 :(得分:4)
var
参数需要一个实数变量,例如:
var
some_int_value: integer;
my_enum: TMyEnum;
begin
my_enum := TMyEnum(some_int_value);
DoSomething(my_enum);
some_int_value := Ord(my_enum);
答案 1 :(得分:4)
由于TEnum
是Integer
的子范围,因此编译器仅使用适合此子范围的最小可能类型。在这种情况下,它是Byte
。
因此,如果some_int_value
被声明为Byte
,那么您的类型转换就会成功。但实际上它被声明为Integer
,因此类型转换引入了一个临时Byte
来存储类型转换的结果。编译器没有那么做,以便将对此temprary Byte的任何更改写回到类型转换的源。这就是你得到描述错误的原因。