2
我試圖編譯這段代碼:建築,當我得到這個錯誤https://github.com/RanaExMachina/ada-fuse如何在Ada中顯式指定泛型類型的大小?
不幸的是:
fuse-system.ads:147:04: size clause not allowed for variable length type
這似乎是因爲它的代碼試圖設置記錄的大小是一個問題,具有通用類型作爲條目。這似乎是一個新的錯誤,因爲開發人員在2.5年前撰寫這個問題時沒有遇到這個問題。不幸的是,他不能在短時間內幫助我,但我必須讓圖書館去。然而,在解決這個問題上我有點無奈。
基本上我覺得我不得不告訴gnat這個類型會有多大,與gnat相信的是相反的先驗知識:它是一種訪問類型。在record
或泛型類型定義中。
相關的部分是:
fuse-main.ads:
package Fuse.Main is
package IO is
new Ada.Direct_IO (Element_Type);
type File_Access is access IO.File_Type;
fuse-system.ads:
generic
type File_Access is private;
package Fuse.System is
...
type File_Info_Type is record
Flags : Flags_Type;
Fh_Old : Interfaces.C.unsigned_long;
Writepage : Interfaces.C.int;
Direct_IO : Boolean := True;
Keep_Cache : Boolean := True;
Flush : Boolean := True;
Nonseekable : Boolean := True;
Fh : File_Access;
Lock_Owner : Interfaces.Unsigned_64;
end record;
type File_Info_Access is access File_Info_Type;
pragma Convention (C, File_Info_Type);
for File_Info_Type'Size use 32*8;
我蚊蚋的版本是:4.9.2-1(Debian的傑西)
我不知道它是否有意義(或者是有幫助的話),使文件不完整類型在這裏。我想我會嘗試,並在通用本身中定義訪問類型,以便泛型可以在聲明實際文件的相同公共部分實例化。 – manuBriot
@manuBriot,我已經包含了你的建議。 –