我遇到了包可见性方面的问题。我有一个非常简单的包,代码如下所示。错误消息显示在此处:
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带入视图吗?
答案 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',如图所示。