이 포스트의 값을 사용하면 이전 게시물의 후속이다 :에이다 : 건설 객체
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;
이제 질문 (01 23,)의 수평 및 수직 성분 Basis_R 채 위와 같이 I 개체 Configuration
를 작성한
. 내가 Configuration
의 수평 성분 말에 액세스하려면, 다음이 작동하지 않습니다
aa := Rectangular_Form.Configuration.Rectangular.Horz;
나는 액세스하기 위해 다양한 표현을 시도
(유형 Long_Float의 수 aa
을 정의 후) 객체의 구성 요소는 헛되이 Configuration
입니다.
모든 도움을 주시면 감사하겠습니다.
감사합니다 ...
'Configuration'의 * 유형 *'Rectangular_Form.Rectangular'입니다 , 그 * name *은 단지'Configuration'입니다. –
@ Simon Wright 감사합니다. 나는'Configuration'이 * object.component * 형태로 직접 접근 할 수있는 Horz와 Vert 컴포넌트를 가진 객체라고 생각하게되었습니다. 1 표지지. – yCalleecharan