-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);

割り当て可能な型付き定数はオンです。

最初のサンプルですべての配列値を 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.

--jeroen

于 2011-02-10T20:46:03.850 に答える