Delphi 添加第九个枚举时类型转换无效
我继承了一些需要修改的代码。原文基本上就是下面的内容。我需要在枚举列表中添加第九项,但当我添加时,我在“ord(byte(ts))”处得到一个无效的类型转换 因为一个字节可以是任何有效到255的字节,所以我不理解这个异常Delphi 添加第九个枚举时类型转换无效,delphi,ordinal,Delphi,Ordinal,我继承了一些需要修改的代码。原文基本上就是下面的内容。我需要在枚举列表中添加第九项,但当我添加时,我在“ord(byte(ts))”处得到一个无效的类型转换 因为一个字节可以是任何有效到255的字节,所以我不理解这个异常 我该怎么做才能添加第九个枚举并仍然具有代码功能?在添加tsNine之前,您有8个枚举值,因此一组枚举值需要8位,并装入字节中。现在您有9位,需要一个字来适应设置。因此,您现在必须转换到Word。您可以查看SizeOf(ts),亲自查看。您似乎在混合两种东西 列举 它们被实现为一
我该怎么做才能添加第九个枚举并仍然具有代码功能?在添加
tsNine
之前,您有8个枚举值,因此一组枚举值需要8位,并装入字节中。现在您有9位,需要一个字
来适应设置。因此,您现在必须转换到Word
。您可以查看SizeOf(ts)
,亲自查看。您似乎在混合两种东西
列举
它们被实现为一个整数值。默认情况下,它们是顺序的。但您也可以为它们设置特定的值。例如:
type
TEnum = (eOne, eTwo, eThree);
TBigEnum = (beOne = 1, beTen = 10, beHundred = 100, beThousand = 1000);
在这里,一个十字节实际上可以容纳一个字节,最大值为255。TBigEnum需要一个词(因为beThousand的值)
设置
它们被实现为一个位数组。“枚举1”是第一位,“枚举2”是第二位,以此类推。如果有8个或更少的枚举,它将适合1个字节、9到16个字节、2个字节,以此类推
根据我前面的例子,
TEnum=枚举集
TBigEnums=TBigEnum的集合
不会编译,因为值“TBigEnum.eThousand”将是集合中的第1001位(从零开始),需要一个大小为126字节的集合。Delphi将集合的大小限制为32字节(最大值为255)。不确定为什么这对您不起作用,但我更关心您对GetStatus
的递归调用。。。它不会给你一个堆栈溢出错误吗?还有,调用GetStatus
的代码在哪里?i、 e.begin
在end之前。
您是指异常还是编译器错误?@jerrydoge:如果在枚举中包含tsNine
,则代码不会编译。AFAICT这确实是OP所说的,但代码中还有其他几个问题。我不认为这是一个问题。我无法重新创建错误,即使在修复代码时也是如此。我只得到一个堆栈溢出。OP的问题一团糟GetStatus
是递归的,i
参数从未被使用过。它符合问题标题和引用的错误消息。“但问题可能会更清楚。”杰瑞肯定这是个问题。不能将双字节变量强制转换为单字节类型。
type
TEnum = (eOne, eTwo, eThree);
TBigEnum = (beOne = 1, beTen = 10, beHundred = 100, beThousand = 1000);