0

我正在尝试制作一个数组数组来获取数据(我之前添加过),将其称为“GameMap[i,j,k].Items[m].Index”或“GameMap[i,j,k ]。数数”

我在 delphi 中的类型部分如下所示:

type
 TItemRec = record
 Index: Integer;
 Volume: Integer;
 Count: Integer;
 Id: string;
end;
TMApRec = record
  ID: LongWord;
  Count: integer;
  Order1: integer;
  Order2: integer;
  Order3: integer;
  Order4: integer;
  Order5: integer;
  Order6: integer;
  Order7: integer;
  Order8: integer;
  Order9: integer;
  Order10: integer;
  Items: array[0..9] of TItemRec;
end;

TMap = class

GameMap : array[0..8,0..14,0..$12] of TMapRec; 

例如,如果我现在这样做:

procedure TMap.Update;
 var
  i,j,k,m: integer;
 begin
  i:=0;
  while i < 8 do
  begin
   j:=0;
   while j < 14 do
   begin
    k:=0;
     while k < $12 do
     begin
      m:= 0;
      while m < 10 do
      begin
       showmessage('asdf');
       GameMap[i,j,k].Items[m].Id:= (inttostr(i)+' '+inttostr(j)+' '+inttostr(k)+' '+inttostr(m));
       showmessage((GameMap[i,j,k].Items[m].Id));
       inc(m);
      end;
      inc(k);
     end;
     inc(j);
    end;
    inc(i);
   end;

它只会显示第一个showmessage('asdf'),但是如果你想突出显示它,它会在这里崩溃你有完整的代码http://pastebin.com/xfL94QXU

再次感谢你们的时间

4

2 回答 2

1

如果您未能实例化TMap.

我怀疑调用的代码Update如下所示:

var
  Map: TMap;
begin
  Map.Update;
end;

这将失败,因为Map未初始化。像这样修复它:

var
  Map: TMap;
begin
  Map := TMap.Create;
  try
    Map.Update;
  finally
    Map.Free;
  end;
end;

作为更一般的建议,我强烈建议您阅读有关如何创建简短、自包含、正确(可编译)的示例

于 2013-04-23T08:11:12.907 回答
1

首先声明一个type供您Items记录:

type
  TItemRec = record
    Index: Integer;
    Volume: Integer;
    Count: Integer;
    Id: Integer;
  end;

现在在你的GameMap

GameMap : array[0..8,0..14,0..$12] of record
  ID: LongWord;
  Count: integer;
  Order1: integer;
  Order2: integer;
  Order3: integer;
  Order4: integer;
  Order5: integer;
  Order6: integer;
  Order7: integer;
  Order8: integer;
  Order9: integer;
  Order10: integer;
  Items: array[0..9] of TItemRec;
end;
于 2013-04-22T20:16:40.097 回答