Ada 对象 "Train" 不能在其声明结束前使用

Ada object "Train" cannot be used before end of its declaration

这段代码有什么问题?编译器说了两件事,没有 运行 条目和 运行 accept 与条目不匹配(两者似乎都是错误的),另外,在声明之前不能使用 Train(但它已经声明) .请向我解释发生了什么。

我不太愿意显示完整代码,但可以这样做。

type ItineraryType is array (0..255) of Integer;
type Train is record
    Label : Integer;
    Capacity : Integer;
    Maxspeed : Integer;
    Starts : Integer;
    Itinerary : ItineraryType;
    Stops : Integer;
    lock : access Mutex;
end record;

task type TrainThread is
    entry Run (train1:Train);
end;
task body TrainThread is
    train : Train;
begin
    accept Run (train1:Train) do
        train := train1;
    end;
end;

-- part of main
train1 := new TrainThread;
train1.Run(trains(i));

main.adb:51:05: warning: no accept for entry "Run"
main.adb:52:17: object "Train" cannot be used before end of its declaration
main.adb:54:09: no entry declaration matches accept statement
gnatmake: "main.adb" compilation error

Ada 不区分大小写,所以 trainTrain 是等价的。所以声明 train : Train 永远是无效的。 (不可否认,在这种情况下,gnat 的信息可能会更好)