2017-02-12 38 views
0

我正在努力在Ada中實現素數分解函數。我需要從calc_prime_numbers返回一個Vector。我試圖在Y中存儲該矢量。但是,無論何時編譯,編譯器都會說prime.adb:40:07: subtype mark required in this context。我不確定那是什麼意思。子類型需要什麼意思?我如何解決它?子類型標記在此上下文中需要 - Ada

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; 
+1

不是你的問題的答案,但'while(true)loop'與'loop'相同,並且'if i = m then exit; end if;'與i = m時的exit相同;' – egilhh

+0

Integer_Vectors是包的名稱。該包輸出一個類型,並且您想在Y的聲明中使用該類型的名稱(而不是包)。 (查看通用包的文檔將顯示類型的名稱...) –

+0

請參見[這裏](http://stackoverflow.com/a/28557589/40851)瞭解'需要子類型標記'的內容。 –

回答

3

錯誤消息不代碼匹配你貼,你不指明線40,所以我會去猜測你的行號:

你實例化一個包稱爲Integer_Vectors。稍後你聲明一個變量Y : Integer_Vectors;。所以編譯器會抱怨,因爲它期望變量的類型,而您提供了一個包的名稱。

+0

我已更新原始帖子以指示第40行。如何解決此問題?這是解決方案嗎? '子類型Integer_Vectors是Vectors(Natural,Integer);' – technogeek1995

+3

如何在普通包中使用Vector類型,就像你已經在'calc_prime_numbers'函數中做的那樣:'Numbers:Integer_Vectors.Vector;' – egilhh

相關問題