求助!Delphi的一段程序错在哪

来源:百度知道 编辑:UC知道 时间:2024/05/05 17:49:54
小女刚开始学,估计问题都很菜鸟那种,望众位大侠点拨~不胜感谢 会有加分的
程序的功能就是输入一串字母,我就先设定输3个,然后解码,用的是栈的方法,我下面是相关问题部分:
const
StackSize=3

TStack=class
Element:array[1..StackSize] of char;
procedure Push(Item:char);
procedure Pop(var Item:char);
function IsEmpty:boolean;
function IsFull:boolean;
private
Top:0..StackSize;
constructor Create;
destructor Destroy;override;
public

end;

var
Form1: TForm1;
code,a,b:TStack;

procedure Tform1.Button1Click(Sender: TObject);
var s:char;
t:string;
begin
while code.Top<>0 do //输入部分没有错,我输入的为’abc‘此时code 为{'a','b','c'},code.top=3
begin
s:=code.Element[Top]; //可是调试到这步时top居然变成了185,所以下一步就不能吧code中的字母push进s了。。。这是什么原因呢??
a.Push(s);
code.Top:=code.Top-1;
s:=' ' 。。。后面略

TStack=class
Element:array[1..StackSize] of char;
procedure Push(Item:char);
procedure Pop(var Item:char);
function IsEmpty:boolean;
function IsFull:boolean;
private
Top:0..StackSize;
constructor Create;
destructor Destroy;override;
public

end;

你这个类写的就有问题, constructor Create;
destructor Destroy;override;
这两个方法应该是Public的。 如果你想要在类以外使用这个东东,Top:0..StackSize;,应该把它定义成property,你这样定义的东西,在这个文件以外的地方是没法使用的,也不合面象对象编程的思想。

code.Element[Top]你这句里面的Top引用的并不是TStack类里面的Top,由于你没有定义Top变量,这个Top其实是你的窗口的Top,也就是Form1.Top.

我帮你把这个类改了一下,参考一下吧:

const
StackSize = 3;

type
TStackSize = 0..StackSize-1;

TStack=class
private
FTop: Integer;
Element:array[0..StackSize-1] of char;
public
constructor Create;
destructor Destroy;override;
procedure Push(Item:char);