错误消息:前缀调用“ ...”中的对象必须别名

时间:2019-01-23 18:21:09

标签: ada

我目前正在阅读这份文件:Ada for the C++ or Java Developer。第8章(第33页)介绍了Ada中的面向对象编程。本章从以下示例开始:

type T is tagged record
   V, W : Integer;
end record;

type T_Access is access all T;

function F (V : T) return Integer;

procedure P1 (V : access T);

procedure P2 (V : T_Access);

以下页面描述了有关如何调用子程序P1的示例:

declare
   V : T;
begin
   V.P1;
end;

这导致以下错误:object in prefixed call to "P1" must be aliased (RM 4.1.3 (13 1/2))。如果将procedure P1 (V : access T);替换为procedure P1 (V : in out T);,则示例将成功编译。这是文件中的错字吗?

1 个答案:

答案 0 :(得分:3)

ARM 4.1.3(13.1)是在AI95-00252AI95-00407的2005年修订版中引入的(作为清除的一部分,我印象深刻)。

我会说文件不对。也许这部分材料是在Ada 2005之前开发的。


在某些情况下,标记对象会自动被别名:ARM 3.10(9)

  

[...]标记类型的形式参数或通用形式对象被定义为别名。

所以,这是合法的:

"TimeStamp":{$toDecimal: { $toDate:"$Datum"}}