2011-02-04 22 views
3

パッケージの表示に問題があります。私は本当にシンプルなパッケージを持っており、そのコードは以下の通りです。エラーメッセージがここに示されています:パッケージが表示されないエラー

viterbi.adb:12:14: "Integer_Text_IO" is not visible (more references follow) 
viterbi.adb:12:14: non-visible declaration at a-inteio.ads:18 
gnatmake: "viterbi.adb" compilation error 

次のようにパッケージ仕様は次のとおりです。

package Viterbi is 

    procedure Load_N_File(
    Filename : in String; 
    N : in out Integer; 
    M : in out Integer); 

end Viterbi; 

次のようにパッケージ本体は次のとおりです。

with Ada.Integer_Text_IO; use with Ada.Integer_Text_IO; 
with Ada.Strings; use Ada.Strings; 

package body Viterbi is 

    procedure Load_N_File(
    Filename : in String; 
    N : in out Integer; 
    M : in out Integer 
) is 
    N_File : File_Type; 
    begin 
    Open(N_File, Mode=>In_File, Name=>Filename); 
    Get(N_File, N); 
    Get(N_File, M); 
    Close(N_File); 
    end Load_N_File; 

end Viterbi; 

私のパッケージに体を引き起こしている何隠されたままになるパッケージ? use節はInteger_Text_IOを表示するべきではありませんか?

+0

多くの人が私に同意しませんが、私は一般的に、 'use'節なしでコードを書くようアドバイスします。それが完了し、クリーンアップ段階に入ると、コードを明確にするならば、それらを戻すことができます。それらの問題は、あなたが物事が実際には存在しないパッケージに入っていると思っているため、上記のような問題を抱えているところまで怠けてしまうことです。 –

+0

実際は非常に合理的です。私がC++を書くとき、私はいつも一番上のモジュールを除いて完全なスコープ(すなわちboost :: smarter_ptr、std :: string)を使います。そのような政策をアダにも採用することは理にかなっていると思います。 –

+0

どのコンパイラを使用していますか?私は "viterbi.adb:1:31:予約語"を "識別子として使うことはできません"を得ます! –

答えて

4

提供されているパッケージ本体のコードには、構文エラーがあります。「を使用してください。 Ada.Integer_Text_IO;」に偽の「with」があります。句。私はその後、コンパイルエラーがFILE_TYPEオープン、および閉じるを解決できないことを中心受ける、ということ

を固定しました。 Ada.Text_IOの "with"と "use"を追加すると、きれいなコンパイルができます。

ので、パッケージ本体の開始は次のようになります。あなたはまだ、これらのエラーを修正した後にエラー「Integer_Text_IOを見つけることができません」取得している場合は、私はあなたの開発について不審になると思い

with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; 
with Ada.Strings; use Ada.Strings; 
with Ada.Text_IO; use Ada.Text_IO; 

package body Viterbi is 
    ... 

つまり、すべて正しくインストールされていますか?

+0

ありがとう、私は余分な "を"逃したとは思わない。それを削除してもエラーは消えませんでしたが、Ada.Text_IOパッケージを追加して表示するとエラーが解決されました。再度、感謝します。 –

2
あなたが避けることができ

すでにカンマで区切られたスタイルを使用することにより、指摘したように、エラーのスタイル「で使用」: で - テスト、 Ada.Integer_Text_IO、 Ada.Strings。

Use 
-- Testing, 
Ada.Strings, 
Ada.Integer_Text_IO; 

これは、表示されているように、特定のパッケージ 'withs'または 'usues'をコメントアウトすることもできます。

+0

いいね、コンマでパッケージ名を分けることができるのか分かりませんでした。私は最近、これらの日の言語仕様を読むことに慣れる必要があります... –

関連する問題