包不可见错误

时间:2011-02-04 21:42:33

标签: ada gnat

我遇到了包可见性方面的问题。我有一个非常简单的包,代码如下所示。错误消息显示在此处:

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带入视图吗?

2 个答案:

答案 0 :(得分:4)

提供的包体的代码有一个语法错误:“使用 Ada.Integer_Text_IO”中的虚假“with”;子句。

解决了这个问题后,我发现编译错误无法解决 File_Type Open Close 。添加Ada.Text_IO的“with”和“use”给我一个干净的编译。

所以包体的开头看起来像是:

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
   ...

如果您在修复这些错误后仍然遇到“找不到Integer_Text_IO”错误,那么我会对您的开发环境产生怀疑,即一切安装正确吗?

答案 1 :(得分:2)

如前所述,您可以使用以逗号分隔的样式来避免“使用”错误样式:     同      - 测试,     Ada.Integer_Text_IO,     Ada.Strings;

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

这也允许您注释掉特定包'withs'或'usues',如图所示。