关于ADA中受保护的数据对象

Kre*_*wie 3 ada

我是Ada的新手,但对于一般的编程并不陌生.我有受保护的数据对象的问题.正如我从示例和书中所理解的那样,您可以像对待任务一样调用受保护数据对象中的成员.

这是我的代码:

procedure ass4 is

   protected type Signal_Object is
      entry Wait;
      procedure Signal;
      function Is_Open return Boolean;
   private
      Open : Boolean := False;
   end Signal_Object;

   protected body Signal_Object is

      entry Wait when Open is
      begin
         Open := False;
      end Wait;

      procedure Signal is
      begin
         Open := True;
      end Signal;

      function Is_Open return Boolean is
      begin
         return Open;
      end Is_Open;

   end Signal_Object;
begin

Signal_Object.Signal;

end;
Run Code Online (Sandbox Code Playgroud)

但是编译器不喜欢这个调用Signal_Object.Signal;,我得到以下错误

invalid use of subtype mark in expression or call
Run Code Online (Sandbox Code Playgroud)

那我错过了什么?

egi*_*lhh 6

您有受保护的类型,而不是受保护的对象.要么改变声明

protected type Signal_Object is
Run Code Online (Sandbox Code Playgroud)

protected Signal_Object is
Run Code Online (Sandbox Code Playgroud)

或声明该类型的对象

My_Signal_Object : Signal_Object;
Run Code Online (Sandbox Code Playgroud)

然后调用该对象

My_Signal_Object.Signal
Run Code Online (Sandbox Code Playgroud)