我将我的项目从GNAT 7.3.1传递到了GNAT 18.1,而且我对char做作有一个编译错误。
我想影响字符串末尾的度'°‘这个特殊字符,但是编译器返回这个错误:
R : String := "-NNN.N°";
begin
...
R(R'Last) := '°';
return R;
end我得到了这个:
strings are delimited by double quote character
expected type "Standard.Character"
found a string type如果我用字母或数字替换符号°,它就能工作。如果我试图将其转换为R(R'Last) := Standard.Character('°');,编译器也会说同样的话。
有人遇到过同样的问题吗?
发布于 2018-11-29 16:16:43
您的代码(从这里复制并粘贴到我的编辑器中)是UTF-8编码的,因此您的学位符号使用两个字节(十六进制C2B0 )编码。
默认情况下,所以你得告诉我将期望拉丁文-1在字符/字符串/文本IO中使用UTF-8,使用-gnatW8。
以lnlb.adb为例,
with Ada.Text_IO;
procedure Lnlb is
R : String := "-NNN.NX";
begin
R(R'Last) := '°';
Ada.Text_IO.Put_Line (R);
end Lnlb;编译(基于macOS)
$ gnatmake lnlb.adb -gnatW8
gcc -c -gnatW8 lnlb.adb
gnatbind -x lnlb.ali
gnatlink lnlb.ali然后跑
$ ./lnlb
-NNN.N°发布于 2018-12-02 10:07:06
字符被定义为拉丁文-1,所以当使用标准键盘上不能直接使用的字符时,最好以其他方式引用它们,而不是使用字符文字:
R (R'Last) := Ada.Characters.Latin_1.Degree_Sign;或
R (R'Last) := Character'Val(176); -- Degree symbolhttps://stackoverflow.com/questions/53541972
复制相似问题