type
minePnt = class
X,Y: integer;
ulP: TPoint;
Status: integer;
IsMine: boolean;
public function rndNum: integer;
public procedure LClick;
private procedure VLClick(X,Y:integer);
end;
minePntPtr=^minePnt;var
Form1: TForm1;
MineArr: array[1..20] of array[1..20] of minePntPtr;implementationprocedure Init;
var i,j:integer; tmpPtr: minePntPtr;
begin
for i:=1 to 20 do
for j:=1 to 20 do
begin
showmessage(IntToStr(i)+':'+IntToStr(j));
new(tmpPtr);
with tmpPtr^ do
begin
X:=i; Y:=j;
ulP:=Point((X-1)*20,(Y-1)*20);
Status:=-1; IsMine:=False;
end;
MineArr[i,j]:=tmpPtr;
end;
end;当init运行到第2次,i=1,j=2时就出错了
new(tmpPtr);
改成
tmpPtr:=new(minePntPtr);
也是一样的效果这里构造函数都还没写
类的动态生成到底应该如何做?
minePnt = class
X,Y: integer;
ulP: TPoint;
Status: integer;
IsMine: boolean;
public function rndNum: integer;
public procedure LClick;
private procedure VLClick(X,Y:integer);
end;
minePntPtr=^minePnt;var
Form1: TForm1;
MineArr: array[1..20] of array[1..20] of minePntPtr;implementationprocedure Init;
var i,j:integer; tmpPtr: minePntPtr;
begin
for i:=1 to 20 do
for j:=1 to 20 do
begin
showmessage(IntToStr(i)+':'+IntToStr(j));
new(tmpPtr);
with tmpPtr^ do
begin
X:=i; Y:=j;
ulP:=Point((X-1)*20,(Y-1)*20);
Status:=-1; IsMine:=False;
end;
MineArr[i,j]:=tmpPtr;
end;
end;当init运行到第2次,i=1,j=2时就出错了
new(tmpPtr);
改成
tmpPtr:=new(minePntPtr);
也是一样的效果这里构造函数都还没写
类的动态生成到底应该如何做?
直接写create
minePntPtr=^minePnt;
minePntPtr就不是类了,
MineArr: array[1..20] of array[1..20] of minePnt;init改成这样之后,i=1,j=1就出错了 for i:=1 to 20 do
for j:=1 to 20 do
begin
showmessage(IntToStr(i)+':'+IntToStr(j));
MineArr[i,j].Create;
with MineArr[i,j] do
begin
X:=i; Y:=j;
ulP:=Point((X-1)*20,(Y-1)*20);
Status:=-1; IsMine:=False;
end;
end;init改成这样之后,i=1,j=1就出错了
var
i,j:integer;
begin for i:=1 to 20 do
for j:=1 to 20 do
begin
showmessage(IntToStr(i)+':'+IntToStr(j));
MineArr[i,j]:= minePnt.Create;
with MineArr[i,j] do
begin
X:=i; Y:=j;
ulP:=Point((X-1)*20,(Y-1)*20);
Status:=-1; IsMine:=False;
end;
end;end;
用户自定义类不同于用户自定义记录