-1

此代码无法在 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 和 Cardinal 有什么区别?

4

3 回答 3

3

我要大胆一点,并声明*没有区别*。您以某种方式得出了错误的结论,并且没有为我们提供足够的信息来帮助您。我确信您没有在此处粘贴 1:1 的代码副本,并且您遗漏了一些相关的内容。

可能是一个邪恶的同事,他在左括号前粘贴了一个不可见的 unicode 字符,并将相同的字符定义为其他地方的函数。它也可能更明显一些。

你能在一个干净的项目中重现这个问题吗?因为我很确定你不能。如果可以,请回帖。如果不能,请发布更多上下文。无论如何,证明我错了。

于 2011-02-10T20:17:00.347 回答
1

您可能在代码中的某处有一个名为 longword 的函数。

function LongWord: Integer;
begin
 result := 0;
end;

procedure Foo;
const
    InitSignature : array[0..3] of LongWord =
        ($67452301, $EFCDAB89, $98BADCFE, $10325476);
begin
  //...
end;
于 2011-02-11T18:57:36.763 回答
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.

——杰伦

于 2011-02-10T20:46:03.850 回答