3
procedure RandSeed();
var datum: TDateTime;
var hodina,minuta,sekunda,milisekunda: Word;
begin
  DecodeTime(datum,hodina,minuta,sekunda,milisekunda);
  RandSeed := milisekunda;
end;

このコードは機能しません。コンパイルしようとすると、「左側を割り当てることはできません」と表示されます。誰でも理由を知っていますか?ありがとう。

編集:あなたのヒントに基づいて次のようにコードを変更しましたが、現在は機能しています。ありがとうございます!

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

2 に答える 2

7

変数に値を割り当てるには、RandSeedこのように完全修飾名を指定System.RandSeedして、独自のプロシージャーと名前が競合しないようにするRandSeedか、単にプロシージャーの名前を変更する必要があります。

于 2012-04-12T11:16:01.130 に答える
3

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

2 番目の理由は、先ほど述べたように、プロシージャから値を返そうとしていることです。代わりに関数が必要です。

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内部変数を独自の関数に置き換えることが意図されている場合、これは機能します。関数を使用して既存のRandSeed変数に値を代入することのみを目的としている場合は、プロシージャを次の内容に変更します::

System.RandSeed := millisekunda;
于 2012-04-12T11:22:29.517 に答える