2017-04-13 3 views
2

このコードの問題点は何ですか?コンパイラは、実行エントリがなく、実行許可がエントリに一致しない(どちらも間違っていると思われる)と、別にTrainを宣言前に使用することはできない(ただし、既に宣言されている)という2つのことを言います。何が起こっているのかを私に説明してください。Adaオブジェクト "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 

答えて

5

エイダは、大文字と小文字を区別しないので、trainTrainは等価です。したがって、train : Trainという宣言は常に無効です。 (確かにgnatのメッセージはこの場合には良いかもしれません)

関連する問題