是什么导致了这个 Ada 编译错误“歧义字符文字”?

pro*_*eek 2 ada gnat

我有这个 Ada 代码。

with Ada.Text_IO; 
use Ada.Text_IO;

procedure for_Loop is
begin
    for Counter in 'A'..'Z' loop
        Put(Counter);   
    end loop;
    New_Line;
end for_Loop;
Run Code Online (Sandbox Code Playgroud)

Ada 编译器 (gnatmake) 输出这些错误消息。

gcc -c for_loop.adb
for_loop.adb:6:24: ambiguous character literal
for_loop.adb:6:24: possible interpretation: Character
for_loop.adb:6:24: possible interpretation: Wide_Character
for_loop.adb:6:24: possible interpretation: Wide_Wide_Character
gnatmake: "for_loop.adb" compilation error
Run Code Online (Sandbox Code Playgroud)

代码有什么问题?

pro*_*eek 5

这篇文章

问题是“A”和“Z”可能来自 Character 或 Wide_Character。最简单的修正是使类型显式;例如:对于字符范围内的字符 'A' .. 'Z' 循环 ... 结束循环;

with Ada.Text_IO; 
use Ada.Text_IO;

procedure for_Loop is
begin
    for Counter in Character range 'A'..'Z' loop
        Put(Counter);   
    end loop;
    New_Line;
end for_Loop;
Run Code Online (Sandbox Code Playgroud)

这是输出:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)

  • 这并不能解释*为什么*它是无效的。链接确实如此,但信息应该在答案中。 (2认同)