Ошибка при использовании пакетов - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующая программа:

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

Я не знаю, как это исправить.

1 Ответ

0 голосов
/ 27 апреля 2018

Это разница между областью видимости и видимостью.

with pkg_task; означает, что этот pkg_task теперь находится в вашей области видимости, но его элементы не видны напрямую.

Поэтому, чтобы использовать task_t, вы можете либо поставить префикс перед именем пакета: pkg_task.task_t, либо сделать тип видимым с помощью предложения use (use pkg_task;).

Для получения дополнительной информации по этой теме вы можете проверить Ада Дистиллированная .

...