Этот пост является продолжением предыдущего поста:Ada: Использование значений построенных объектов
Ada: Understanding private types and understanding packaging
Я пытаюсь создать объект с именем Configuration
, распечатать его на экране, так что я могу его содержимое, а также попытаться получить доступ к компонентам этого созданного объекта. Это последняя часть, которая дает мне проблемы. Коды приведены в следующем:
Первая спецификация пакета Rectangular_Method.ads
:
package Rectangular_Method is
type Rectangular is private;
function Construct(Horz, Vert : Long_Float) return Rectangular;
procedure Print(Configuration: in Rectangular);
procedure Vector_Basis_r (A : in Long_Float; D : out Rectangular);
function Get_Horz (R : Rectangular) return Long_Float;
function Get_Vert (R : Rectangular) return Long_Float;
private
type Rectangular is
record
Horz, Vert: Long_Float;
end record;
end Rectangular_Method;
Далее, тело пакета Rectangular_Method.adb
:
with Ada.Text_IO, Ada.Long_Float_Text_IO;
with Ada.Numerics.Long_Elementary_Functions;
use Ada.Numerics.Long_Elementary_Functions;
package body Rectangular_Method is
function Construct(Horz, Vert : Long_Float) return Rectangular is
begin
return(Horz, Vert);
end Construct;
procedure Print(Configuration: in Rectangular) is
use Ada.Text_IO, Ada.Long_Float_Text_IO;
begin
Put("(");
Put(Configuration.Horz, Fore => 2, Aft => 2, Exp => 0); Put(", ");
Put(Configuration.Vert, Fore => 2, Aft => 2, Exp => 0);
Put_Line(")");
end Print;
procedure Vector_Basis_r (A : in Long_Float; D : out Rectangular) is
begin
D.Horz := Cos (A, Cycle => 360.0);
D.Vert := Sin (A, Cycle => 360.0);
end Vector_Basis_R;
function Get_Horz (R : Rectangular) return Long_Float is
begin
return R.Horz;
end Get_Horz;
function Get_Vert (R : Rectangular) return Long_Float is
begin
return R.Vert;
end Get_Vert;
end Rectangular_Method;
И, наконец, тестовый файл test_rectangular_form.adb
:
with Ada.Long_Float_Text_IO;
with Ada.Text_IO; use Ada.Text_IO;
with Rectangular_Form;
use type Rectangular_Form.Rectangular;
procedure Test_Rectangular_Form is
Theta : Long_Float;
Basis_r : Rectangular_Form.Rectangular;
Configuration: Rectangular_Form.Rectangular;
begin
Ada.Text_IO.Put("Enter the angle ");
Ada.Long_Float_Text_IO.Get (Item => theta);
--Vector basis
Rectangular_Form.Vector_Basis_R (A => Theta, D => Basis_R);
Configuration := Rectangular_Form.Construct(Rectangular_Form.Get_Horz (Basis_R),Rectangular_Form.Get_Vert (Basis_R));
Ada.Text_IO.New_Line;
Rectangular_Form.Print(Configuration);
end Test_Rectangular_Form;
Теперь вопрос (на основе):
Я создал объект Configuration
, как показано выше, удерживая горизонтальные и вертикальные компоненты Basis_R. Если я хочу, чтобы получить доступ сказать горизонтальную составляющую Configuration
, следующее не работает:
aa := Rectangular_Form.Configuration.Rectangular.Horz;
(после определения aa
быть типа Long_Float)
Я попытался различные выражения для доступа к компоненты объекта Configuration
, но напрасно.
Любая помощь была бы очень признательна.
Спасибо ...
'Configuration' в * Тип * является' Rectangular_Form.Rectangular' , но его * имя * - это просто «Конфигурация». –
@ Simon Wright Спасибо. Мне пришло в голову, что «Конфигурация» - это объект, который имеет компоненты «Horz» и «Vert», к которым можно получить доступ непосредственно в форме * object.component *. 1 голос вверх. – yCalleecharan