起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 230|回复: 6

【搞定】请教一下下列代码为什么出错?**

[复制链接]
发表于 2007-5-24 14:49:52 | 显示全部楼层 |阅读模式
type

  TokenRec = record
    State: Byte;
    Value: Extended;
    FuncName: string;
  end;

  TfrmEveryDayPay = class(TForm)

  public
    Stack: array of TokenRec;
    procedure BizFormCreate(Sender: TObject);
    {public declarations}
    procedure Pop(var Token: TokenRec);
  end;

implementation  

procedure TfrmEveryDayPay.BizFormCreate(Sender: TObject);
var
  o: TokenRec;
begin
  SetLength(Stack, 15);
  o.Value := 10;
  o.State := 0;
  Stack[2] := o;
end;

procedure TfrmEveryDayPay.Button3Click(Sender: TObject);
var
  o: TokenRec;
begin
  Pop(o);
end;

procedure TfrmEveryDayPay.Pop(var Token: TokenRec);
{ Pops the top Token off of the stack }
var
  i: Integer;
begin
  i := 2;
  Token := Stack;  //在这行出错。错误信息为:List index out of bounds(17)  类型EListError
  Dec(i);
end; { Pop }
回复

使用道具 举报

 楼主| 发表于 2007-5-24 16:10:50 | 显示全部楼层
上述如果是系统的Bug就结贴吧。。
回复 支持 反对

使用道具 举报

发表于 2007-5-24 17:03:09 | 显示全部楼层
Record不是对象,不能直接赋值。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-25 11:12:27 | 显示全部楼层
procedure TfrmEveryDayPay.Pop(var Token: TokenRec); 这行如果我改成
procedure TfrmEveryDayPay.Pop(: TokenRec);  就没有问题了。
{ Pops the top Token off of the stack }
var
  i: Integer;
begin
  i := 2;
  Token := Stack;  
  Dec(i);
end; { Pop }
回复 支持 反对

使用道具 举报

发表于 2007-5-25 13:38:53 | 显示全部楼层
楼主,抱歉。我搞错了,Record是可以直接按内容赋值的。
1楼错误暂时没有找到原因,你先用函数来替代一下吧。
function TMainForm.popT: TokenRec;
var
  i: Integer;
begin
  i := 2;
  Result := Stack;
  Dec(i);
end;
回复 支持 反对

使用道具 举报

发表于 2007-5-31 13:54:01 | 显示全部楼层
平台对record支持不太好,建议使用Class
回复 支持 反对

使用道具 举报

发表于 2007-6-4 17:34:59 | 显示全部楼层
楼主,如果没有其他问题就结贴了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-21 07:29 , Processed in 0.052040 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表