Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ada函数,访问堆栈_Ada - Fatal编程技术网

Ada函数,访问堆栈

Ada函数,访问堆栈,ada,Ada,Ada非常新,这是我第一次用它编码。非常失落。任何提示和指导都会很好 Ada问题: 我试图使:函数Top(S:Stack)return Item_Type(返回堆栈上的顶部项或引发下溢异常)返回到通用无界堆栈包 我为此添加的函数位于此代码块的底部。 当前错误: 在表达式或调用中使用子类型标记无效 “From”的实际值必须是一个变量 在表达式或调用中使用子类型标记无效 包体未绑定\u堆栈 类型单元格是记录 项目:项目类型; 下一步:堆栈; 结束记录; 程序推送(项目:在项目类型中;推送到:在堆栈外

Ada非常新,这是我第一次用它编码。非常失落。任何提示和指导都会很好

Ada问题:

我试图使:函数
Top(S:Stack)return Item_Type
(返回堆栈上的顶部项或引发下溢异常)返回到通用无界堆栈包

我为此添加的函数位于此代码块的底部。 当前错误: 在表达式或调用中使用子类型标记无效 “From”的实际值必须是一个变量 在表达式或调用中使用子类型标记无效

包体未绑定\u堆栈
类型单元格是记录
项目:项目类型;
下一步:堆栈;
结束记录;
程序推送(项目:在项目类型中;推送到:在堆栈外)是
开始
上:=新单元格(项=>项,下一步=>上);-->
端推;
过程Pop(项:出项类型;起始:入出堆栈)为
开始
如果你是空的,那么
提高底流;
其他的
项目:=来自.项目;
From:=From.Next;
如果结束;
结束弹出;
函数为空(S:Stack)返回布尔值为
开始
返回S=null;
终点是空的;
--添加此代码,然后出现错误!
函数顶部(S:堆栈)返回项类型为
开始
--提高底流
如果是空的,则
提高底流;
其他的
--或者从堆栈返回顶部项,调用pop
Pop(项目类型,from=>S)--我想我应该从烟囱里抽出来
如果结束;
返回项目类型;
端顶;
结束未绑定的_堆栈;

您有两条错误消息指向此行:

Pop(项目类型,from=>S)--我想我应该从烟囱里抽出来
第一个是指向
Item_Type
,表示“在表达式或调用中子类型标记的使用无效”

  • 这意味着您正在不允许使用类型名称的位置使用类型名称。子程序的实际参数永远不能是类型。您需要为实际参数使用(取决于参数方向)变量或表达式
您正在将一个类型(项目类型)传递到Pop中。相反,您需要声明一个Item_类型的变量并使用它

e、 g

然后对Pop的调用变成:

   Pop (Item => Popped_Item, From => S)

您是否检查了错误消息所指的行号?如果您在GNAT Programming Studio(GPS)之类的IDE中编译文件,编辑器将帮助您找到出错的行。您好,我正在Windows上使用GPS。有行号,但对我来说真的没有意义。这里是错误/行的链接。谢谢,但我还是不确定。我习惯C++,有没有一个C++相当于这个错误,这可能帮助我更好地理解我做错了什么?我不知道任何C++错误消息。尝试声明一个类型为
Item_type
的变量,并将该变量传递给
Pop
(正如Simon在回答中所写的)。哇,非常感谢。这解释了很多。然而,现在我遇到了“必须是一个变量”中的“实际for”问题,但这让我更加困惑,因为我认为这是一个获取变量S,类型堆栈。。。新图片:问题是Top是一个函数,因此S是in参数(基本上是只读的)。因此,您不能在Pop中使用它,因为它会将值从中写入。如果您创建了一个Stack类型的新变量并将其传入,您将看到错误消失。您说
函数Top(S:Stack).
,这意味着在
Top
中,
S
是只读的(不是变量,所以不是“变量”)。最新标准(Ada 2012)允许函数具有in-out参数(
函数Top(S:in-out Stack).
)。
函数Top(S:Stack).
相当于
函数Top(S:in Stack).
,它有效地将
S
声明为
Top内部的局部常量。
   Pop (Item => Popped_Item, From => S)