2011-02-10 10 views
-1

このコードは、XEにはコンパイルされません。Delphi XEのLongWordとCardinalの違いは?

const 
    InitSignature : array[0..3] of LongWord = 
     ($67452301, $EFCDAB89, $98BADCFE, $10325476); 

[DCCのエラー]:E2026定数式は

を期待したが、これはDOES:アサイナブルには、定数を入力

const 
    InitSignature : array[0..3] of Cardinal = 
    ($67452301, $EFCDAB89, $98BADCFE, $10325476); 

ONです。

最初のサンプルですべての配列値をLongWordにキャストすると、コードがコンパイルされます。 しかし、私はロングワードと枢機卿の違いは何ですか?

+2

D2007で正常にコンパイルされます。 [docs](http://docwiki.embarcadero.com/RADStudio/XE/en/Simple_Types)によると、違いはありません。 –

+1

合意して、違いはなく、64ビット版が出ても違いはありません。 –

+1

D2010でもコンパイルされています – Bharat

答えて

3

私は大胆になり、状態* はありません違い*です。あなたは何とか間違った結論に到着し、私たちにあなたを助けるための十分な情報を提供しませんでした。私はここにコードの1:1コピーを貼り付けなかったと確信しています。

開かれている括弧の前に、少し不自然なユニコード文字を貼り付け、関数と同じ文字を別の場所に定義した邪悪な仲間かもしれません。もう少し明白なことかもしれません。

クリーンなプロジェクトで問題を再現できますか?私はあなたができないと確信しているからです。できれば、ポストバックしてください。できない場合は、より多くの文脈を投稿してください。是非、私を間違っていると証明してください。

+1

+1のチャレンジ。

+1

それ以外の場合は、Rad XE update 1をインストールするだけで問題が解決されます。そうでなければ、OPはfunction LongWord:Booleanのような素敵な関数名を持つコードを使用しています。 –

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

+0

「定数式が必要です」をトリガするには、すばらしい再定義が必要です。私が思い付く最も近い推測は、それを4引数の関数として定義し、等号を入力することをどうにかして忘れることです。おそらく、代入演算子を持つレコードがそのトリックを行いますか? –

1

あなたはロングどこかにあなたのコードで呼ばれる機能を持っているかもしれません。

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

procedure Foo; 
const 
    InitSignature : array[0..3] of LongWord = 
     ($67452301, $EFCDAB89, $98BADCFE, $10325476); 
begin 
    //... 
end; 
関連する問題