0
我試圖用Ada做的是創建一個Book對象,然後打印出那本書。問題是,該語言不是很可寫。當我編譯,生成的主要文件,然後執行該文件,它給了我這個錯誤:錯誤修正:提出CONSTRAINT_ERROR:book1.adb:28長度檢查失敗
raised CONSTRAINT_ERROR : book1.adb:28 length check failed
這裏就是我在體內文件:
package body Book1 is
function getAuthor (B: in Book) return AuthorName is
begin
return B.getAuthor;
end getAuthor;
function getTitle (B: in Book) return TitleName is
begin
return B.getTitle;
end getTitle;
function getNumberOfPages (B: in Book) return Pages is
begin
return B.getNumberOfPages;
end getNumberOfPages;
function createBook (Author: in String; Title: in String; NumberOfPages: in Float)
return Book is
B: Book;
begin
B.getAuthor := Author;
B.getTitle := Title;
B.getNumberOfPages := NumberOfPages;
return B;
end createBook;
end Book1;
下面是我在spec文件:
package Book1 is
type Book is tagged private;
subtype AuthorName is String (1 .. 300);
subtype TitleName is String (1 .. 750);
subtype Pages is Float range 0.0 .. 5000000.0;
function getAuthor(B: in Book) return AuthorName;
function getTitle(B: in Book) return TitleName;
function getNumberOfPages(B: in Book) return Pages;
function createBook(Author: in String; Title: in String; NumberOfPages: in Float)
return Book;
private
type Book is tagged
record
getAuthor: AuthorName;
getTitle: TitleName;
getNumberOfPages: Pages;
end record;
end Book1;
下面是我在測試文件:
with Book1, Ada.Text_IO, Ada.Float_Text_IO;
use Book1, Ada.Text_IO, Ada.Float_Text_IO;
procedure testBook is
theRealBook: Book := createBook(Author => "Jordan White",
Title => "The Last Christmas",
NumberOfPages => 32.0);
procedure Print_Book (B: in Book'Class) is
begin
Put (getAuthor (B => B));
Put (getTitle (B => B));
Put (getNumberOfPages (B => B));
New_Line;
end Print_Book;
begin
Print_Book (theRealBook);
end testBook;
我究竟在做什麼來獲得這個錯誤,我該如何解決?
有*必須*是這個問題的規範答案,但我找不到它。 – 2014-11-05 15:13:00