2012-11-17 51 views
1

當我編譯我的代碼時,得到錯誤消息」parsing.adb:22:32:warning:形參「G」未被引用「 」。任何想法,我必須改變,不要得到這個錯誤信息?錯誤「未引用形式參數」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; 

感謝您的幫助!

+0

那麼你需要用這個參數來做_something_,或者如果你不需要的話就從參數中刪除它。 – Mat

+0

你在哪裏使用這個程序? –

+0

@Mat你是什麼意思,從參數中刪除(我是所有新的Ada語言!) – user1816067

回答

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; 

你指的是由Grid_Load_LIF的調用者傳遞的實際New_Grid;也就是說,主叫方將寫

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

,並在返回Gr將舉行從文件中讀取數據。

1

這裏的基本問題是,你的子程序包含一個out參數,G,你永遠不會分配一個值。這意味着它的值超出例程,如果編譯器允許你這樣做,將是垃圾(甚至可能導致一個Contraint_Error)。

你需要給出一個值(在所有非異常的代碼路徑)爲所有out參數。

+0

這只是一個警告。 –

+0

@SimonWright - 錯過了。輕輕修改答案。 –