我正在尝试创建一个数组数组来获取数据(我之前已添加),称之为“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
,请在此处获取完整代码再次感谢您的时间
答案 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的内容。