Ada 枚举文字也用作参数名

Ada 枚举文字也用作参数名,ada,Ada,我创建了以下示例代码: 带有Ada.Text\u IO; 主要程序是 类型我的类型是 (A), B C) ); 程序Foo(类型:My\u Type)为 开始 无效的 完富;; 程序条(B:字符串)为 开始 --错误 Foo(_类型=>B); --嗯 Foo(The_Type=>My_Type'Succ(A)); --嗯 Foo(类型=>我的类型值(“B”); 端杆; 开始 酒吧(“你好”); 端干管; 枚举类型My_type中定义的文本B也用作过程Bar中的参数名称。不幸的是,编译器假定在过

我创建了以下示例代码:

带有Ada.Text\u IO;
主要程序是
类型我的类型是
(A),
B
C) );
程序Foo(类型:My\u Type)为
开始
无效的
完富;;
程序条(B:字符串)为
开始
--错误
Foo(_类型=>B);
--嗯
Foo(The_Type=>My_Type'Succ(A));
--嗯
Foo(类型=>我的类型值(“B”);
端杆;
开始
酒吧(“你好”);
端干管;

枚举类型
My_type
中定义的文本
B
也用作过程
Bar
中的参数名称。不幸的是,编译器假定在过程调用中
Foo(类型=>B)
B是参数的名称,而不是定义的枚举类型中的文本
B
。我找到了两个解决问题的非最优解决方案。如果我对重命名文字或参数名不感兴趣,还有其他解决方案吗?

您的问题是过程栏中的参数B隐藏了过程栏封闭范围中声明的枚举标识符B。只需使用参数命名作用域:

带有Ada.Text\u IO;
主要程序是
类型我的类型是
(A),
B
C) );
程序Foo(类型:My\u Type)为
开始
无效的
完富;;
程序条(B:字符串)为
开始
Foo(类型=>Main.B);
端杆;
开始
酒吧(“你好”);
端干管;

您的问题是,过程栏中的参数B隐藏了在过程栏的封闭范围中声明的枚举标识符B。只需使用参数命名作用域:

带有Ada.Text\u IO;
主要程序是
类型我的类型是
(A),
B
C) );
程序Foo(类型:My\u Type)为
开始
无效的
完富;;
程序条(B:字符串)为
开始
Foo(类型=>Main.B);
端杆;
开始
酒吧(“你好”);
端干管;

谢谢。这么简单。我尝试了以下方法(没有成功):
Foo(the_Type=>My_Type.B)谢谢。这么简单。我尝试了以下方法(没有成功):
Foo(the_Type=>My_Type.B)