2012-05-05 58 views
2

這篇文章的價值是一前一後的隨訪:阿達:使用構造的對象

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; 

現在的問題(基於test_rectangular_form.adb):

我已經創建了一個對象Configuration如上所示保持的Basis_R水平垂直組件。如果我想訪問說的Configuration水平分量,下面不工作:

aa := Rectangular_Form.Configuration.Rectangular.Horz; 

我已經試過各種表情來訪問(定義aa類型Long_Float後)物體的組成部分Configuration但徒勞無益。

任何幫助將不勝感激。

謝謝...

+1

'Configuration'的*類型*是'Rectangular_Form.Rectangular' ,但其*名稱*只是「配置」。 –

+0

@ Simon Wright謝謝。我被帶入認爲'Configuration'是一個具有'Horz'和'Vert'組件的對象,可以直接以* object.component *的形式訪問它。 1投票。 – yCalleecharan

回答

3

你Get_Horz和Get_Vert功能的目的是爲了獲取你的矩形對象的組件:

aa := Rectangular_Form.Get_Horz(Configuration); 
+0

@ Marc C非常感謝。我認爲我們應該有一些形式爲'Configuration.Rectangular.Horz'的東西。這是誤導我的。 1投票。 – yCalleecharan