G'day,我发现应该是一段简单的代码的编译错误。目标是使用环境变量作为默认值的一部分。我们使用的是 Ada95,所以我想知道这是否是版本问题。
我们所说的“模型”看起来(某种东西)是这样的:
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
Gnat.Os_Lib.Getenv( "DATA_FILES" ) &
"/override_required.txt" );
我在&上遇到错误:
invalid operand types for operator & invalid operand types for operator "&"
然而,这很好。
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
"DATA_FILES" & "/override_required.txt" );
我转向互联网和书籍,似乎它应该可以工作,但打字或其他东西有困难。PLEAC 上给出的例子也给了我一个错误。
- 建立默认值
- GetEnv 示例
- 查看“GetEnv()”上的内容:高级 Linux 编程
username : string := Gnat.Os_Lib.Getenv("USER");
DATA_FILES : String := Gnat.Os_Lib.Getenv( "DATA_FILES" );
给出错误:
- 生成器结果预期类型“Standard.String” 181:37预期类型“Standard.String”生成器结果
- 生成器结果找到类型“System.Strings.String_Access” 181:37
我认为用这种方法我可以
DATA_FILES : String := Gnat.Os_Lib.Getenv( "GPS_DATA_FILES" );
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
DATA_FILES & "/override_required.txt" ); -- ERROR
DATA_FILES_2 : String := "GPS_DATA_FILES"; -- WORKS
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
DATA_FILES_2 & "/override_required.txt" ); -- WORKS
我仍然对 GetEnv 做错了,因为DATA_FILES_2
如果我能正确地从 GetEnv() 分配值,看起来我们想要的一切都会发生,类似于该选项会起作用(根据我的编译器)。
有人可以指出我的错误吗?还是 Ada95 对我正在查看的示例使用不同的规则?