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 回答