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);
也是一样的效果这里构造函数都还没写
类的动态生成到底应该如何做?

解决方案 »

  1.   

    类不用new
    直接写create
      minePntPtr=^minePnt;
    minePntPtr就不是类了,
      

  2.   

    回nyf1220(我是党员)var
      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就出错了
      

  3.   

    MineArr: array[1..20] of array[1..20] of minePnt;procedure Init;
    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;
    用户自定义类不同于用户自定义记录
      

  4.   

    呵呵 MineArr[i,j]:=minepnt.create;应该没错了吧?