Ada很新,这是我第一次用它编码。很丢失。任何提示和方向都会很棒。
Ada问题:
我正在尝试:函数Top (S : Stack) return Item_Type
,它返回堆栈顶部项目或将Underflow异常引发到通用无界堆栈包。
我为此添加的功能位于此代码块的底部。 目前的错误: 在表达式或调用中无效使用子类型标记 “From”的实际值必须是变量 在表达式中无效使用子类型标记或调用
package body Unbound_Stack is
type Cell is record
Item : Item_Type;
Next : Stack;
end record;
procedure Push (Item : in Item_Type; Onto : in out Stack) is
begin
Onto := new Cell'(Item => Item, Next => Onto); -- '
end Push;
procedure Pop (Item : out Item_Type; From : in out Stack) is
begin
if Is_Empty(From) then
raise Underflow;
else
Item := From.Item;
From := From.Next;
end if;
end Pop;
function Is_Empty (S : Stack) return Boolean is
begin
return S = null;
end Is_Empty;
--added this code, and then had errors!
function Top (S : Stack) return Item_Type is
begin
--Raise the underflow
if Is_Empty(S) then
raise Underflow;
else
--or return top item from the stack, call pop
Pop (Item_Type, from => S);--I think I should pull from the stack w/pop
end if;
return Item_Type;
end Top;
end Unbound_Stack;
答案 0 :(得分:1)
您有两条引用此行的错误消息:
Pop (Item_Type, from => S);--I think I should pull from the stack w/pop
第一个指向Item_Type
并说“在表达式或调用中无效使用子类型标记”。
答案 1 :(得分:1)
您将类型(Item_Type)传入Pop。相反,您需要声明一个Item_Type类型的变量并使用它。
e.g。
function Top (S : Stack) return Item_Type is
Popped_Item : Item_Type;
begin
...
然后调用Pop变为:
Pop (Item => Popped_Item, From => S)