変数が「プライベート」の下で定義されている場合(このユニット内でのアクセスを制限する必要がある場合)、何らかの理由で、与えられたコードを整理しています。それらに書き込むときに EAccessViolation エラーが発生します。実装の直前に Var の下で大まかに定義すると、問題なくアクセスできます。私は自分の構造を他の同様のユニットと比較していますが、プライベートユニットは正常に機能し、大きな違いを見つけることはできません.. 何か提案はありますか?
エラー MSG: プロジェクト --- 例外クラス EAccessViolation エラーが発生し、メッセージ「モジュール内のアクセス違反エラー----」が発生しました。アドレス0000050Fのリード
interface
uses
dialogs, math, dateutils, SysUtils, classes;
type
//double = extended;
TDoubleDoubleArray = array of array of double;
TSunPositionAlgorithm = class (TObject)
private
FLocationChanged: boolean;
public
Constructor Create;
Destructor Destroy;
procedure SetDefaults;
end;
Var
SunPositionAlgorithm : TSunPositionAlgorithm;
F_L0: Double;
F_L1: TDoubleDoubleArray;
implementation
{TSunPositionAlgorithm }
constructor TSunPositionAlgorithm.Create;
begin
SetDefaults;
end;
procedure TSunPositionAlgorithm.SetDefaults;
Begin
F_L0:= 1; // works ok
FLocationChanged:=true; // throws eaccess violation error
End;
呼び出し機能 (David H の最初の質問の後に投稿に追加):
procedure TSun.NRELPositionOfSun(const DateTime: TDateTime; var Azimuth, Elevation, Declination: double);
Var
LSunPositionAlgorithm : TSunPositionAlgorithm;
Begin
LSunPositionAlgorithm := TSunPositionAlgorithm.Create;
Try
LSunPositionAlgorithm.SetDefaults;
blah..
Finally
LSunPositionAlgorithm.Destroy;
End;
End;