2016-10-28 52 views
1

如果我已經定義的陣列型等轉換ada.Containers.Vector到陣列

type Integer_Array is array(Natural range <>) of Integer; 

,還可以使用封裝Ada.Containers.Vectors作爲

package Integer_Vectors is new Ada.Containers.Vectors(
    Element_Type => Integer, 
    Index_Type => Natural); 
use Integer_Vectors; 

我怎樣才能實現以下功能?

function To_Integer_Array(V : Integer_Vectors.Vector) return Integer_Array; 

我有什麼到目前爲止

從概念上講,它似乎很容易:

  1. 聲明Temp_ArrInteger_Array與V.Length的能力
  2. 遍歷V和複製所有元素Temp_Arr
  3. 返回Temp_Arr

第1步是給我雖然頭疼的問題。我曾嘗試:

function To_Integer_Array(V: Integer_Vectors.Vector) return Integer_Array is 
    Temp_Arr: Integer_Array(1..V.Length); 
begin 
    -- Todo: copy values here 
    return Temp_Arr; 
end To_Integer_Array; 

這將引發

expected type "Standard.Integer" 
found type "Ada.Containers.Count_Type" 

雖然錯誤絕對是有道理的,我不確知我會如何解決這個問題。

有沒有辦法將Ada.Containers.Count_Type轉換爲Standard.Integer? 會有另一種方法來從Integer_Vector創建一個Integer_Array嗎?

+1

'整數(V.Length)'或更好的,'自然(V.Length)' –

+0

這是快速的感謝。這對每個Count_Type都是安全的嗎? –

+0

不知道你的意思,但fi是不安全的我期望編譯器告訴我。所有的類型轉換手段是「是的,我打算這樣做」。 –

回答

4

感謝布賴恩聲明現在的作品。我的功能正確執行是這樣的:

function To_Integer_Array(V: Integer_Vector) return Integer_Array is 
    Temp_Arr: Integer_Array(1..Natural(V.Length)); 
begin 
    for I in Temp_Arr'Range loop 
     Temp_Arr(I) := V.Element(I); 
    end loop; 
    return Temp_Arr; 
end To_Integer_Array;