Сообщение об ошибке: объект с префиксным вызовом «...» должен иметь псевдоним - PullRequest
0 голосов
/ 23 января 2019

Я сейчас читаю этот документ: Ada для разработчика на C ++ или Java . Глава 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 голосов
/ 24 января 2019

ARM 4.1.3 (13.1) был представлен в редакции 2005 года в AI95-00252 и AI95-00407 (у меня сложилось впечатление, как часть уборки).

Я бы сказал, что документ неверный. Возможно, эта часть материала была разработана до Ады 2005 года.


Это правда, что при некоторых обстоятельствах помеченный объект автоматически получает псевдоним: ARM 3.10 (9) говорит

[...] формальный параметр или универсальный формальный объект тегового типа определен как псевдоним.

Итак, это законно:

declare
   procedure Proc (Param : in out T) is
   begin
      Param.P1;
   end Proc;
   V : T;
begin
   Proc (V);
end;
...