Ada-在此上下文中需要子类型标记

Ada-在此上下文中需要子类型标记,ada,Ada,我试图制作一个简单的循环程序,但是在第18行得到了错误,在这个上下文中需要子类型标记,但是我在运行其他程序时没有得到这个错误 带有Ada.Text\u IO; 使用Ada.Text\u IO; 使用Ada.Integer\u Text\u IO; 使用Ada.Integer\u Text\u IO; 使用Ada.Strings.Unbounded; 使用Ada.Strings.Unbounded; 使用Ada.Text\u IO.Unbounded\u IO; 使用Ada.Text\u IO.U

我试图制作一个简单的循环程序,但是在第18行得到了错误,在这个上下文中需要子类型标记,但是我在运行其他程序时没有得到这个错误

带有Ada.Text\u IO;
使用Ada.Text\u IO;
使用Ada.Integer\u Text\u IO;
使用Ada.Integer\u Text\u IO;
使用Ada.Strings.Unbounded;
使用Ada.Strings.Unbounded;
使用Ada.Text\u IO.Unbounded\u IO;
使用Ada.Text\u IO.Unbounded\u IO;
主要程序是
输入:无界_字符串;
开始
当输入不在“!Close”循环中时——第18行
获取_行(输入);
端环;
端干管;

在成员资格测试中,两个值必须属于同一类型。就你而言,
输入
是一个
无界字符串
,而
“!Close”
是一个字符串文本。 您必须将其中一个转换为另一个,或者只使用
Ada.Strings.Unbounded
(既然您已经使用Ada.Strings.Unbounded
了,那么您就可以看到所有备选方案):

当输入不在\u无界\u字符串(“!Close”)循环中时——第18行

while To_字符串(输入)不在“!Close”循环中--第18行

while input/=“!Close”循环--第18行

在过去的好日子里,所有的成员资格测试都在
中有一个表单
,这就是这个错误消息的来源。现在,成员资格测试更加复杂,但GNAT的错误msg没有跟上。非常感谢!前两个版本可能有效,但对我来说,它们看起来完全奇怪!第三个版本不需要类型转换吗?前两个版本在Ada 2012中是允许的,请参阅。在上面的例子中,membership_choice_列表只包含一个值,我想这可能看起来很奇怪。最后一个使用Ada.Strings.Unbounded中定义的等于运算符,
函数“=”(左:在Unbounded_字符串中;右:在字符串中)返回布尔值