Добрый день, я нахожу ошибки компиляции в том, что должно быть простым фрагментом кода. цель состоит в том, чтобы использовать переменную среды как часть значения по умолчанию. Мы используем 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()" в разделе Advanced Linux Programming.
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().
Может ли кто-нибудь указать на мою ошибку? Или Ада95 использует другие правила, чем примеры, которые я рассматриваю?
Ada.Directories
иAda.Environment_Variables
, чтобы вы могли делать то, что вам нужно, без жесткого кодирования соглашений об именах файлов, зависящих от ОС, или полагаться на пакеты GNAT. Может пора задуматься об обновлении? - person ajb   schedule 06.03.2015