2014-10-02 44 views
0

我是新來的Ada,我試圖創建一個記錄數組,然後把一些記錄放到數組中,但是我得到錯誤nested array aggregate expected。這是我的代碼:Ada編程數組記錄

with Ada.Text_IO; use Ada.Text_IO; 
with Ada.Integer_Text_Io; 
with Ada.unchecked_conversion; 

procedure main is 
    type Byte is range 0..255; 
    for Byte'Size use 8; 

    type Pixel is record 
    R:Byte; 
    G:Byte; 
    B:Byte; 
    end record; 
    for Pixel'Size use 24; 

    r1:Pixel := (1,2,5); 
    r2:Pixel := (1,2,3); 
    r3:Pixel := (1,2,3); 

    type Image is array(Positive range <>, Positive range <>) of Pixel; 
    Pragma Pack(Image); 

    Left:Image(1..3, 1..1) := (r1, r2, r3); 
begin 
    null; 
end main; 
+0

你聲明'圖像「作爲像素的二維陣列,但是然後爲其分配一維像素陣列。這三個像素代表什麼?頂部行左邊的三個像素還是最左邊一列的頂部? – 2014-10-02 14:58:57

回答

5

一個二維數組需要一個二維聚合,即每個元素也是一個聚合的聚合。例如:

type Integer_Matrix is array (Positive range <>, Positive range <>) of Integer; 
M : Integer_Matrix (1..2, 1..2) := ((1, 2), (3, 4)); 

當任一維的長度爲1時,它需要特殊處理,因爲括號中的單個值不被視爲聚合。單元素集合需要寫成(1 => Value)[如果需要,使用實際的索引代替1]。在你的情況下,圖像的每一行有長度1.所以,你會聚集有三個元素,每個元素將是長度爲1的另一個聚集這將需要看起來像這樣:

Left : Image (1..3, 1..1) := ((1=>r1), (1=>r2), (1=>r3)); 
+0

這一切都是有效的,但我不確定OP實際上是在嘗試創建3x1圖像......我認爲在意圖和代碼之間可能存在更大的斷開連接。 – 2014-10-02 14:59:47

+0

你好,非常感謝你的回答。我試圖把一行三列,無論如何,我想知道如果你知道一種方法,我們可以直接從內存中讀取圖像,並將其放入數組中,圖像是一個.bmp文件。 – omar 2014-10-03 08:30:27