2

この投稿は、以前の投稿のフォローアップです。

Ada: プライベート タイプとパッケージングの理解

という名前のオブジェクトを作成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;

今の質問(に基づくtest_rectangular_form.adb):

Configuration上記のように、 Basis_Rの水平コンポーネントと垂直コンポーネントを保持するオブジェクトを作成しました。の水平成分にアクセスしたい場合、次は機能しません。Configuration

aa := Rectangular_Form.Configuration.Rectangular.Horz;

( Long_Floataa型になるように定義した後)

オブジェクトのコンポーネントにアクセスするためにさまざまな式を試しConfigurationましたが、無駄でした。

どんな助けでも大歓迎です。

ありがとう...

4

1 に答える 1

3

Get_Horz および Get_Vert 関数の目的は、Rectangular オブジェクトのコンポーネントを取得することです。

aa := Rectangular_Form.Get_Horz(Configuration);
于 2012-05-05T17:15:56.830 に答える