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 纳入视野吗?

4

2 回答 2

5

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

解决了这个问题后,我得到了围绕无法解析File_TypeOpenClose的编译错误。添加 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”错误,那么我会怀疑您的开发环境,即一切安装是否正确?

于 2011-02-05T01:16:49.340 回答
2

正如已经指出的那样,您可以通过使用逗号分隔的样式来避免“使用 with”样式的错误:With -- Testing, Ada.Integer_Text_IO, Ada.Strings;

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

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

于 2011-02-08T23:41:15.063 回答