2012-04-12 9 views
3
procedure RandSeed(); 
var datum: TDateTime; 
var hodina,minuta,sekunda,milisekunda: Word; 
begin 
    DecodeTime(datum,hodina,minuta,sekunda,milisekunda); 
    RandSeed := milisekunda; 
end; 

このコードは機能しません。私がコンパイルしようとすると、「左側に割り当てることができません」というメッセージが表示されます。なぜ誰も知っていますか?ありがとう。RandSeedは機能しませんか?

編集:私のコードをあなたのヒントに基づいて以下のように変更しました。あなたがあなた自身の手順RandSeedと競合名を回避またはちょうどあなたの手順の名前を変更するために、このSystem.RandSeedのように完全修飾名を指定する必要がありますRandSeed変数に値を代入する

procedure RandSeed(); 
var hodina,minuta,sekunda,milisekunda: Word; 
begin 
    DecodeTime(now,hodina,minuta,sekunda,milisekunda); 
    System.RandSeed := milisekunda; 
end; 
+0

それは問題を説明する2つの答えが削除されたことにがっかりだ、と答えていること残っているのはそれを行えません。 TLama、Jason:答えが最初でないかどうかは関係ありません。それが良い場合は、私は1つのためにそれを投票します! –

+0

@DavidHeffernanなぜ私の答えが失敗するのですか? – RRUZ

+0

@RRUZあなたは今編集しました。元のバージョンでは何も説明されておらず、「これを実行して動作する」と言っただけです。猶予期間が始まる直前にそれを修正しました。私は他の回答者が自分の銃に固執し、速い回答者(たとえば私のようなもの)によってびっくりすることを奨励したいと思います。 –

答えて

3

2つの問題:最初に、RRUZに言及すると、定義済みのSystem.RandSeedと名前の競合があります。競合は、プロシージャから値を戻そうとしているために発生します。 (下記参照)

第2の理由は、私が言ったように、プロシージャから値を返そうとしていることです。代わりに関数が必要です。あなたの目的は、独自の機能を備えた内部RandSeed変数を交換する場合

function RandSeed: Word; 
var 
    datum: TDateTime; 
var 
    hodina,minuta,sekunda,milisekunda: Word; 
begin 
    DecodeTime(datum,hodina,minuta,sekunda,milisekunda); 
    RandSeed := milisekunda; 
    // Better (and more modern) would be 
    // Result := milisekunda; 
end; 

、これは動作します。あなたの目的は、単に既存のRandSeed変数に値を割り当てるために、あなたの機能を使用する場合は、含まれているためにあなたの手順を変更する::

System.RandSeed := millisekunda; 
7

+0

どういう意味ですか? – argoneus

+0

+1。良いキャッチ - 'System.RandSeed'は変数であり関数ではないので、私は名前の衝突を逃しました。 –

関連する問題