我目前正在阅读这份文件: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);
,则示例将成功编译。这是文件中的错字吗?
答案 0 :(得分:3)
ARM 4.1.3(13.1)是在AI95-00252和AI95-00407的2005年修订版中引入的(作为清除的一部分,我印象深刻)。
我会说文件不对。也许这部分材料是在Ada 2005之前开发的。
在某些情况下,标记对象会自动被别名:ARM 3.10(9)说
[...]标记类型的形式参数或通用形式对象被定义为别名。
所以,这是合法的:
"TimeStamp":{$toDecimal: { $toDate:"$Datum"}}