1

コードをコンパイルすると、「parsing.adb:22:32: 警告: 正式なパラメーター "G" が参照されていません」というエラー メッセージが表示されます。このエラー メッセージが表示されないようにするには、何を変更する必要があるのでしょうか。

ここに私のコードがあります:

with Ada.Text_IO, Ada.Integer_Text_IO, Life, parsing;
use Ada.Text_IO, Ada.Integer_Text_IO, Life, parsing;

package body Parsing is

Parsing_Failed : exception;


type New_Grid is record
Hauteur : Natural;
Largeur : Natural;
Tableau : Grid;
end record;

   procedure Grid_Load_LIF(G : out Grid ; File_Name : in String) is
    Fichier:File_Type;
    Ligne:String(1..75);
    Grille : New_Grid;
    Num_Ligne : Positive := 1;
    Lu : Natural:=0;
begin
open(Fichier, In_File, File_Name);

while not End_of_File(Fichier) loop
    get_Line(Fichier, Ligne, Lu);

for i in 1..Lu loop
    if ligne(I) = '*' then
        grille.Tableau(Num_Ligne,I) := True;
    elsif ligne(I)= '.' then
        grille.Tableau(Num_Ligne,I) := False;

    end if;
end loop;
Num_Ligne := Num_Ligne +1;
grille.Largeur := Lu;
grille.Hauteur := Num_Ligne;

end loop;
end Grid_Load_LIF;

end Parsing;

ご協力いただきありがとうございます !

4

2 に答える 2

2

Grid_Load_LIFおそらく変更する必要があると思います

procedure Grid_Load_LIF(Grille : out New_Grid ; File_Name : in String)

次に、行を削除します

Grille : New_Grid;

そうすれば、あなたが言うとき

grille.Largeur := Lu;
grille.Hauteur := Num_Ligne;

New_Gridの呼び出し元から渡された実際の値を参照していますGrid_Load_LIF。つまり、呼び出し元が書き込みます

   Gr : New_Grid;
begin
   Grid_Load_LIF (Gr, "data_file.lif");

戻り時Grに、ファイルから読み取ったデータを保持します。

于 2012-11-17T16:20:53.940 に答える
1

ここでの基本的な問題は、サブルーチンに値を割り当てないoutパラメーターが含まれていることです。Gつまり、コンパイラがこれを許可している場合、ルーチンの外側の値はガベージになります (おそらく Contraint_Error を引き起こすことさえあります)。

すべてのパラメーターに (すべての非例外コード パスで)値を指定する必要があります。out

于 2012-11-19T14:56:09.650 に答える