0

こんにちは、単純なコードのはずなのにコンパイル エラーが見つかりました。目的は、環境変数をデフォルト値の一部として使用することです。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 の例でもエラーが発生します。

    username : string := Gnat.Os_Lib.Getenv("USER");
    DATA_FILES  : String := Gnat.Os_Lib.Getenv( "DATA_FILES" );

エラーが発生します:

  • ビルダーの結果は、型 "Standard.String" が期待されます181:37型 "Standard.String" が期待されます ビルダーの結果
  • Builder の結果、タイプ "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

DATA_FILES_2GetEnv() から値を正しく割り当てることができれば、(私のコンパイラによると) オプションと 同様に、必要なすべてが機能するように見えるため、GetEnv にはまだ何か問題があります。

誰かが私のエラーを指摘できますか? それとも、Ada95 は私が見ている例とは異なるルールを使用していますか?

4

1 に答える 1