G'day, I'm finding compile errors on what ought to be a simple piece of code. the objective is to use an environment variable as part of a default value. We are using Ada95, so I wondered if it's a version thing.
The 'model' we stated with looks (something) like this:
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
Gnat.Os_Lib.Getenv( "DATA_FILES" ) &
"/override_required.txt" );
I'm getting an error on the &:
invalid operand types for operator & invalid operand types for operator "&"
Whereas, this is fine.
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
"DATA_FILES" & "/override_required.txt" );
I turned to the internet and books, is just seems that it should work and here's a difficulty with typing or something. The example given on PLEAC give me an error too.
- Establishing a default value
- GetEnv example
- Look at "GetEnv()" on: Advanced Linux Programming
username : string := Gnat.Os_Lib.Getenv("USER");
DATA_FILES : String := Gnat.Os_Lib.Getenv( "DATA_FILES" );
Gives the error:
- Builder results expected type "Standard.String" 181:37 expected type "Standard.String" Builder results
- Builder results found type "System.Strings.String_Access" 181:37
I thought with that approach I can
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
I'm still doing something wrong with the GetEnv because it looks like everything we want will happen similar to the DATA_FILES_2
option would work (according to my compiler) if I can correctly assign the value from GetEnv().
Can someone point out my error? Or is Ada95 using different rules to the examples I'm looking at?