创建和获取值“数组结构数组”

时间:2013-04-22 19:27:08

标签: arrays delphi delphi-xe2

我正在尝试创建一个数组数组来获取数据(我之前已添加),称之为“GameMap [i,j,k] .Items [m] .Index”或“GameMap [i, j,k] .Count“

我在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

,请在此处获取完整代码

再次感谢您的时间

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;

作为更一般的建议,我强烈建议您阅读有关如何创建Short, Self Contained, Correct (Compilable), Example的内容。