Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 添加第九个枚举时类型转换无效_Delphi_Ordinal - Fatal编程技术网

Delphi 添加第九个枚举时类型转换无效

Delphi 添加第九个枚举时类型转换无效,delphi,ordinal,Delphi,Ordinal,我继承了一些需要修改的代码。原文基本上就是下面的内容。我需要在枚举列表中添加第九项,但当我添加时,我在“ord(byte(ts))”处得到一个无效的类型转换 因为一个字节可以是任何有效到255的字节,所以我不理解这个异常 我该怎么做才能添加第九个枚举并仍然具有代码功能?在添加tsNine之前,您有8个枚举值,因此一组枚举值需要8位,并装入字节中。现在您有9位,需要一个字来适应设置。因此,您现在必须转换到Word。您可以查看SizeOf(ts),亲自查看。您似乎在混合两种东西 列举 它们被实现为一

我继承了一些需要修改的代码。原文基本上就是下面的内容。我需要在枚举列表中添加第九项,但当我添加时,我在“ord(byte(ts))”处得到一个无效的类型转换

因为一个字节可以是任何有效到255的字节,所以我不理解这个异常


我该怎么做才能添加第九个枚举并仍然具有代码功能?

在添加
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);