如果我定义了一个数组类型,例如
type Integer_Array is array(Natural range <>) of Integer;
Run Code Online (Sandbox Code Playgroud)
并使用包 Ada.Containers.Vectors 作为
package Integer_Vectors is new Ada.Containers.Vectors(
Element_Type => Integer,
Index_Type => Natural);
use Integer_Vectors;
Run Code Online (Sandbox Code Playgroud)
我该如何实现以下功能?
function To_Integer_Array(V : Integer_Vectors.Vector) return Integer_Array;
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的
从概念上讲,这似乎很简单:
不过,第 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;
Run Code Online (Sandbox Code Playgroud)
这会抛出
expected type "Standard.Integer"
found type "Ada.Containers.Count_Type"
Run Code Online (Sandbox Code Playgroud)
虽然这个错误绝对有道理,但我不确定如何解决它。
有没有办法将 Ada.Containers.Count_Type 转换为 Standard.Integer?还有另一种方法可以从 Integer_Vector 创建 Integer_Array 吗?
感谢布莱恩,该声明现在有效了。我的函数的正确实现如下所示:
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;
Run Code Online (Sandbox Code Playgroud)