Delphi 整数到枚举类型作为var?
例如,我有enumDelphi 整数到枚举类型作为var?,delphi,Delphi,例如,我有enum 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_in
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错误]:E2197常量对象不能作为var参数传递。如何解决这个问题?一个
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);
由于
TEnum
是Integer
的子范围,编译器只使用适合此子范围的最小可能类型。在这种情况下,它是一个字节
因此,如果
某些int值
被声明为字节
,则您的类型转换将成功。但是它实际上被声明为整数
,因此类型转换引入了一个临时的字节
,以存储类型转换的结果。编译器不会将对这个临时字节的任何更改写回typecast的源代码。这就是为什么会出现所描述的错误。尽管听起来有些迂腐,但您所声明的实际上并不是枚举,而是一些常量和整数子范围类型。枚举声明将删除常量,并将现有的TMyEnum
替换为TMyEnum=(MY_FIRST,MY_SECOND,MY_THIRD)
,或者更习惯地说,TMyEnum=(meFirst,meSecond,meThird)代码>。实际上它是enum,而它是C代码。有些东西我们不能从C翻译成Delphi 1x1。