2017-12-07 5 views
1
if assigned(S3) then Log('TChunkManager.UpdateVertices Create VAO ms: ' + 
    S3.ElapsedMilliseconds.ToString); 

問題は割り当てられた部分です、私はLog( 'aaa')で試して、Logも別の場所でうまく動作します。 S3(TStopwatch)が割り当てられたものと互換性がないのはなぜですか?割り当てられた(TStopWatch)はE2008を与えます

**[dcc64 Error] thChunkManager.pas(529): E2008 Incompatible types** 

S3が作成されているかどうかを確認するにはどうすればよいですか?

答えて

2

TStopWatchrecord typeであり、class typeではありません。呼び出しのスレッドのスタックメモリにレコードのインスタンスを作成することができます。クラス型のインスタンスは、ヒープメモリ内で動的に割り当てられる必要があります。ポインターのみをAssigned()に渡すことができます。スタック上のレコードインスタンスはカウントされません。あなたがしようとしているものを、あなたはおそらく代わりにTStopWatch.IsRunningプロパティを使用するために

if S3.IsRunning then 
    Log('TChunkManager.UpdateVertices Create VAO ms: ' + S3.ElapsedMilliseconds.ToString); 
+0

なぜ命名規則は、このことについてどんなヒントを与えるものではありませんか?レコードタイプは、例えばRStopWatchのように、異なる接頭辞で名前を付けることができます。知っていることがなくても自動的に明らかであるか、各タイプを確認することができれば、間違った解放などの問題を救うでしょう。 – Doege

関連する問題