[英]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 Integer
( array (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.