出于某种原因,如果变量是在“私有”下定义的(它们需要在此单元内限制访问),我正在整理我得到的一些代码。我在写信给他们时收到 EAccessViolation 错误。如果我在实现之前在 Var 下松散地定义它们,它们就可以正常访问。我正在将我的结构与其他类似单位进行比较,其中私人单位工作正常,无法发现任何重大差异。有什么建议吗?
错误消息:项目 --- 引发异常类 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 的第一个问题后添加到 Post 中):
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;