以下程序发生:project1.exe raised exception class EAccessViolation with message 'Access violation at address 00000000. Read of address00000000'. Process stopped. Use Step or Run to continue.错误信息。请问以下代码错在哪里?执行Myfun(12)执行的是什么运算? f()函数会兼容定义的过程类型嘛?
public
{ Public declarations } end;
TMyFun=function(i:integer):integer;{声名一个过程类型}
var
Form1: TForm1;
Myfun:TmyFun;implementation{$R *.dfm}function f(i:integer):Integer;
begin
result:=i*2;
end;
function f2(j:integer):integer;
begin
result:=j+100;
end;
procedure TForm1.Button1Click(Sender: TObject);begin
Edit1.Text:=inttostr(myfun(12));
end;end.
public
{ Public declarations } end;
TMyFun=function(i:integer):integer;{声名一个过程类型}
var
Form1: TForm1;
Myfun:TmyFun;implementation{$R *.dfm}function f(i:integer):Integer;
begin
result:=i*2;
end;
function f2(j:integer):integer;
begin
result:=j+100;
end;
procedure TForm1.Button1Click(Sender: TObject);begin
Edit1.Text:=inttostr(myfun(12));
end;end.
begin
MyFun := f2; // 加上这句 or := f;
Edit1.Text:=inttostr(myfun(12));
end;
var
myfun: TMyFun;
....
myFun := f; //myfun := f2;
Edit1.Text:=inttostr(myfun(12));
var bt:TStrings;
begin
//必须有下面的构造函数才行,不然会出现异常
//bt:=TStringList.Create;
bt.Add(' ');
end;
type
TMyClass = class
end;这个TMyClass和你的TMyFun一样是不能直接用的~~