Ожидаемый закрытый тип "Ada.Real_Time.Time_Span" - PullRequest
0 голосов
/ 01 мая 2018

У меня есть следующее тело задачи:

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
with Ada.Task_Identification; use Ada.Task_Identification;

package body pkg_task is
    task body task_t is
        activationTime : Time_Span := 1; -- 1 second
        period : Time_Span := 2; -- 2000 milliseconds
        computingTime : Time_Span := 1; -- 1000 milliseconds
        activeWaiting : Integer;
        startingTime : Time;
    begin
        delay To_Duration(activationTime);

        startingTime := Clock;

        while (Clock - startingTime) < computingTime loop
            activeWaiting := activeWaiting + 1;

            Put_Line("Task(" & Image(Current_Task) & "): Internal variable: " & Integer'Image(activeWaiting));

            if (period - (Clock - startingTime)) < computingTime then
                delay To_Duration(period - (Clock - startingTime));
            end if;
        end loop;
    end task_t;
end pkg_task;

При компиляции я получил указанную ошибку:

gcc-7 -c pkg_task.adb
pkg_task.adb:8:47: expected private type "Ada.Real_Time.Time_Span"
pkg_task.adb:8:47: found type universal integer
pkg_task.adb:9:39: expected private type "Ada.Real_Time.Time_Span"
pkg_task.adb:9:39: found type universal integer
pkg_task.adb:10:46: expected private type "Ada.Real_Time.Time_Span"
pkg_task.adb:10:46: found type universal integer

Дело в том, что я совсем новичок в этом языке, и я не очень разбираюсь в этом. На самом деле, я нахожу это немного сложным, и я не нахожу много информации в Интернете.

1 Ответ

0 голосов
/ 01 мая 2018

Поскольку Time_Span является закрытым типом, литералы не будут автоматически преобразованы. Попробуйте:

To_Time_Span (1.0)

Кроме того, поскольку параметр To_Time_Span является вещественным типом (длительностью), вам нужна десятичная часть. Ада не позволит вам смешивать целые и вещественные типы без явных преобразований.

...