Concurrency “Ada对象”;“火车”;不能在其声明结束之前使用

Concurrency “Ada对象”;“火车”;不能在其声明结束之前使用,concurrency,syntax-error,task,ada,Concurrency,Syntax Error,Task,Ada,这个代码有什么问题?编译器说了两件事,并没有Run条目,Run accept与条目不匹配(两者似乎都是错误的),另外,在声明之前不能使用Train(但它已经被声明)。请向我解释发生了什么事 我对显示整个代码犹豫不决,但我可以这样做 type ItineraryType is array (0..255) of Integer; type Train is record Label : Integer; Capacity : Integer; Maxspeed : Inte

这个代码有什么问题?编译器说了两件事,并没有Run条目,Run 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));


Ada不区分大小写,因此
train
train
是等效的。因此,声明
train:train
将始终无效。(无可否认,在这种情况下,gnat的信息可能更好)

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