簡體   English   中英

以Ada標記類型創建2D數組字段

[英]Creating a 2D-Array Field in an Ada Tagged Type

我正在嘗試在Ada中創建等效的Java / C類。 根據我的研究-等同於標記記錄。 我想創建一個二維數組的字段,但是使用下面的代碼-它給我以下錯誤。

碼:

package Foo is
type Bar is tagged
    record
        field1 : Integer;
        field2 : Integer;
        type field3 is array (1 .. 10, 1 .. 5) of Integer;
    end record;
end Foo;

錯誤:

foo.ads:6:25: missing "end record;" for "record" at line 8

foo.ads:7:17: no "record" for this "end record"

這告訴我“不允許將匿名數組作為組件”。

package Foo is
type Bar is tagged
    record
        field1 : Integer;
        field2 : Integer;
        field3 : array (1 .. 10, 1 .. 5) of Integer;
    end record;
end Foo;

您的第二個版本失敗的原因是

field3 : array (1 .. 10, 1 .. 5) of Integer;

聲明一個新的未命名(匿名)類型( array (1 .. 10, 1 .. 5) of Integerarray (1 .. 10, 1 .. 5) of Integer )),並且不允許嵌套類型聲明。

根據您的應用程序,您可以嘗試

type Twod_Array is array (Integer range <>, Integer range <>) of Integer;
type Bar is tagged
   record
      field1 : Integer;
      field2 : Integer;
      field3 : Twod_Array (1 .. 10, 1 .. 5);
   end record;

要么

type Twod_Array is array (Positive range <>, Positive range <>) of Integer;
type Bar (First, Second : Natural) is tagged
   record
      field1 : Integer;
      field2 : Integer;
      field3 : Twod_Array (1 .. First, 1 .. Second);
   end record;

[嗯。 我說的First, Second : Natural允許零長度數組。 但是我不確定A_Bar : Bar (0, 10); 將會!]

您試圖在另一個命名類型的聲明內聲明一個命名類型。 你不能那樣做。

另外,Ada不允許匿名類型的記錄字段,因此,在聲明記錄本身之前,必須確保已聲明記錄字段所需的所有類型。

您確定需要-32_768 .. 32_767范圍內的值(這是Ada對類型Integer承諾)? 通常,將聲明一種符合問題要求的類型。 (當然,如果問題是緊密匹配C類型int ,則應該使用Interfaces.C.int 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM