使用包时出错
Error using packages
我有以下程序:
with Ada.Text_IO;
with pkg_task;
with pkg_procedure;
procedure exercise2 is
my_task : task_t;
begin
loop
my_task.ConsultsState;
end loop;
end;
使用以下包 pkg_task
:
with Text_IO;
package body pkg_task is
task body task_t is
entry IsEven(N: Integer) is
EvenConsult : Integer := 0;
OddConsult : Integer := 0;
begin
if N rem 2 = 0 then
Put_Line("Number " & N & " is even");
EvenConsult := EvenConsult + 1;
else
Put_Line("Number " & N & " is odd");
OddConsult := OddConsult + 1;
end if;
end IsEven;
entry ConsultsState is
begin
Put_Line("Total even numbers consulted: " & EvenConsult);
Put_Line("Total odd numbers consulted: " & OddConsult);
end ConsultsState;
end task_t;
end pkg_task;
当我编译时,我得到这个错误:
gcc-4.9 -c exercise2.adb
exercise2.adb:6:19: "task_t" is not visible
exercise2.adb:6:19: non-visible declaration at pkg_task.ads:2
exercise2.adb:9:17: invalid prefix in selected component "my_task"
gnatmake: "exercise2.adb" compilation error
我不知道怎么解决。
这就是范围和可见性的区别。
with pkg_task;
意味着这个 pkg_task
现在在你的范围内,但它的元素不是直接可见的。
因此,为了使用 task_t
,您可以在其前面加上包名:pkg_task.task_t
,或者使用 use 子句 (use pkg_task;
) 使类型可见。
有关此主题的更多信息,您可以查看Ada Distilled。
我有以下程序:
with Ada.Text_IO;
with pkg_task;
with pkg_procedure;
procedure exercise2 is
my_task : task_t;
begin
loop
my_task.ConsultsState;
end loop;
end;
使用以下包 pkg_task
:
with Text_IO;
package body pkg_task is
task body task_t is
entry IsEven(N: Integer) is
EvenConsult : Integer := 0;
OddConsult : Integer := 0;
begin
if N rem 2 = 0 then
Put_Line("Number " & N & " is even");
EvenConsult := EvenConsult + 1;
else
Put_Line("Number " & N & " is odd");
OddConsult := OddConsult + 1;
end if;
end IsEven;
entry ConsultsState is
begin
Put_Line("Total even numbers consulted: " & EvenConsult);
Put_Line("Total odd numbers consulted: " & OddConsult);
end ConsultsState;
end task_t;
end pkg_task;
当我编译时,我得到这个错误:
gcc-4.9 -c exercise2.adb
exercise2.adb:6:19: "task_t" is not visible
exercise2.adb:6:19: non-visible declaration at pkg_task.ads:2
exercise2.adb:9:17: invalid prefix in selected component "my_task"
gnatmake: "exercise2.adb" compilation error
我不知道怎么解决。
这就是范围和可见性的区别。
with pkg_task;
意味着这个 pkg_task
现在在你的范围内,但它的元素不是直接可见的。
因此,为了使用 task_t
,您可以在其前面加上包名:pkg_task.task_t
,或者使用 use 子句 (use pkg_task;
) 使类型可见。
有关此主题的更多信息,您可以查看Ada Distilled。