Vector 此上下文中需要子类型标记-Ada

Vector 此上下文中需要子类型标记-Ada,vector,primes,ada,Vector,Primes,Ada,我正在Ada中实现素数分解函数。我需要从计算素数返回一个向量。我试图将该向量存储在Y中。但是,每当我编译时,编译器都会说prime.adb:40:07:此上下文中需要子类型标记。我不知道那是什么意思。需要的子类型是什么意思?我怎么修理它 with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers.Vectors; use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers; procedure Pri

我正在Ada中实现素数分解函数。我需要从
计算素数
返回一个向量。我试图将该向量存储在
Y
中。但是,每当我编译时,编译器都会说
prime.adb:40:07:此上下文中需要子类型标记
。我不知道那是什么意思。需要的子类型是什么意思?我怎么修理它

with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers.Vectors;
use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers;

procedure Prime is
   package Integer_Vectors is new Vectors(Natural, Integer);

   function Is_Prime(I : Integer) return Boolean is
      J : Integer := 2;
   begin
      for J in 2 .. I-1 loop
         if I mod J = 0 then
            return False;
         end if;
      end loop;
      return True;
   end Is_Prime;

   function calc_prime_numbers(n : Integer) return Integer_Vectors.Vector is
      i : Integer := 0;
      m : Integer;
      Numbers : Integer_Vectors.Vector;
   begin
      m := n + 1;
      while (true) loop
         i:=i + 1;
         if Is_Prime(i) then
            Integer_Vectors.Append(Numbers, i);
            Put(Integer'Image(i) & " + ");
         end if;
         if i = m then
            exit;
         end if;
      end loop;
      New_Line;
      return Numbers;
   end calc_prime_numbers;

   X : Integer;
   Y : Integer_Vectors; — line 40

begin
   while (true) loop
      Get(X);
      if Is_Prime(X) then
         Put(Integer'Image(X) & " is prime.");
      else
         Put(Integer'Image(X) & " is not prime.");
      end if;
      New_Line;
      Y := calc_prime_numbers(X); — line 40

   end loop;
end Prime;

错误消息中的行号与粘贴的代码不匹配,并且没有指明第40行的位置,因此我不得不猜测:


您实例化了一个名为
Integer\u Vectors
的包。稍后声明一个变量
Y:Integer\u Vectors。因此编译器会抱怨,因为它需要变量的类型,而您提供了包的名称。

错误消息中的行号与您粘贴的代码不匹配,并且您没有指出第40行的位置,因此我不得不猜测:


您实例化了一个名为
Integer\u Vectors
的包。稍后声明一个变量
Y:Integer\u Vectors。因此编译器会抱怨,因为它需要变量的类型,而您提供了包的名称。

不是对您的问题的回答,但是
while(true)loop
loop
相同,如果i=m,则退出
;如果结束与i=m时退出相同整数向量是包的名称。该包导出一个类型,并且您希望在Y的声明中使用该类型的名称,而不是包的名称。(查看通用包的文档将显示类型的名称…)请参阅“需要子类型标记”上的内容。这不是对您的问题的回答,但
while(true)loop
loop
相同,如果i=m则退出
;如果结束与i=m时退出相同整数向量是包的名称。该包导出一个类型,并且您希望在Y的声明中使用该类型的名称,而不是包的名称。(查看通用包的文档将显示类型的名称…)请参阅“需要子类型标记”中的内容。我已更新了原始帖子,以指示第40行。我怎样才能解决这个问题?这就是解决办法吗<代码>子类型整数\矢量为矢量(自然、整数)
如何在通用包中使用
向量
类型,就像您已经在
计算素数
函数中所做的那样:
数字:整数向量.Vector我已经更新了原始帖子,以指示第40行。我怎样才能解决这个问题?这就是解决办法吗<代码>子类型整数\矢量为矢量(自然、整数)
如何在通用包中使用
向量
类型,就像您已经在
计算素数
函数中所做的那样:
数字:整数向量.Vector