2016-10-28 2 views
1

Si j'ai défini un type de tableau commeada.Containers.Vector à un tableau

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

et également utiliser Ada.Containers.Vectors de paquet comme

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

Comment puis-je mettre en œuvre la fonction suivante ?

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

Ce que j'ai jusqu'à présent

Conceptuellement, il semble vraiment facile:

  1. Déclarez Temp_Arr comme Integer_Array avec une capacité de V.Length
  2. itérer sur V et copier tous les éléments à Temp_Arr
  3. Retour Temp_Arr

Étape 1. me donne des maux de tête cependant. J'ai essayé:

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; 

Cela jette

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

Bien que l'erreur a beaucoup de sens, je ne suis pas certain de la façon dont je pourrais le résoudre.

Existe-t-il un moyen de convertir Ada.Containers.Count_Type en Standard.Integer? Y aurait-il une autre façon de créer un Integer_Array à partir d'Integer_Vector?

+1

'Entier (V.Length)' ou mieux, 'naturel (V.Length)' –

+0

Ce fut grâce rapide. Est-ce sûr pour chaque Count_Type? –

+0

Je ne sais pas ce que vous voulez dire, mais je ne m'attends pas à ce que le compilateur me le dise. Tout le moyen de conversion de type est "oui je voulais faire ça". –

Répondre

4

Grâce à Brian, la déclaration fonctionne maintenant. La mise en œuvre correcte pour ma fonction ressemble à ceci:

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;