此代码无法在XE中编译:
const
InitSignature : array[0..3] of LongWord =
($67452301, $EFCDAB89, $98BADCFE, $10325476);
[DCC错误]:E2026预期的常量表达式
但是这样做了:
const
InitSignature : array[0..3] of Cardinal =
($67452301, $EFCDAB89, $98BADCFE, $10325476);
可分配的类型常量为ON。
如果我在第一个示例中将所有数组值强制转换为LongWord,则代码将进行编译。 但我不知道LongWord和红衣主教有什么区别?
答案 0 :(得分:3)
我会变得大胆,并声明 * 没有差异* 。你以某种方式得出了错误的结论,并向我们提供的信息不足以帮助你。我确信你没有粘贴你的代码的1:1副本,而且你遗漏了相关的东西。
可能是一个邪恶的同事,在开始括号之前粘贴了一个小的univodeble unicode字符,并将其他角色定义为相同的字符。它也可能更明显一些。
你能在干净的项目中重现这个问题吗?因为我很确定你做不到。如果可以,请回复。如果你不能,发布更多上下文。无论如何,证明我错了。
答案 1 :(得分:1)
您的代码中可能有一个名为longword的函数。
function LongWord: Integer;
begin
result := 0;
end;
procedure Foo;
const
InitSignature : array[0..3] of LongWord =
($67452301, $EFCDAB89, $98BADCFE, $10325476);
begin
//...
end;
答案 2 :(得分:0)
下面的代码在Delphi XE中编译得很好。
向我们展示您的代码的更多上下文;它看起来像是为你重新定义LongWord
。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
InitSignatureLongWords : array[0..3] of LongWord =
($67452301, $EFCDAB89, $98BADCFE, $10325476);
const
InitSignatureCardinals : array[0..3] of Cardinal =
($67452301, $EFCDAB89, $98BADCFE, $10325476);
begin
end.
- 的Jeroen