compiler-errors - 使用软件包时出错

标签 compiler-errors ada

我有以下程序:

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

关于compiler-errors - 使用软件包时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50058280/

相关文章:

c++ - 优化 switch 语句时出现 Visual Studio 2005 C 编译器问题

c++ - 为什么这段代码说我需要一个类/结构/union ?

c++ - 代码没有错误,但在命令提示符下什么都不做

ada - 为什么前缀调用不适用于访问类型?

Ada: "image"属性的前缀必须是类型

haskell - 哪个 Haskell 编译器具有信息丰富的(初学者友好的)错误消息?

java - 为什么这个组合代码不起作用?

ada - FreeRTOS + GNAT Ada 编译库

compiler-construction - GNAT 支持的目标架构列表?

ada - 在定点声明中使用 gnat 出现奇怪的编译错误