2
基本上,我有2個文件(.adb和.ads)。我對Ada是全新的,也是如何編譯2個文件的。該程序是一個基本的堆棧實現。編譯.adb文件時出現此編譯錯誤。Ada初學者堆棧程序
$ gcc -c test_adt_stack.adb
abstract_char_stack.ads:22:01: end of file expected, file can have only one compilation unit
2檔我有【 abstract_char_stack.ads
-----------------------------------------------------------
package Abstract_Char_Stack is
type Stack_Type is private;
procedure Push(Stack : in out Stack_Type;
Item : in Character);
procedure Pop (Stack : in out Stack_Type;
Char : out Character);
private
type Space_Type is array(1..8) of Character;
type Stack_Type is record
Space : Space_Type;
Index : Natural := 0;
end record;
end Abstract_Char_Stack;
-----------------------------------------------------------
package body Abstract_Char_Stack is
----------------------------------------------
procedure Push(Stack : in out Stack_Type;
Item : in Character) is
begin
Stack.Index := Stack.Index + 1;
Stack.Space(Stack.Index) := Item;
end Push;
--------------------------------------------
procedure Pop (Stack : in out Stack_Type;
Char : out Character) is
begin
Char := Stack.Space(Stack.Index);
Stack.Index := Stack.Index - 1;
end Pop;
--------------------------------------------
end Abstract_Char_Stack;
,另一種是test_adt_stack.adb
-----------------------------------------------------------
with Ada.Text_IO; use Ada.Text_IO;
with Abstract_Char_Stack; use Abstract_Char_Stack;
procedure Test_ADT_Stack is
S1 : Stack_Type;
S2 : Stack_Type;
Ch : Character;
begin
Push(S1,'H'); Push(S1,'E');
Push(S1,'L'); Push(S1,'L');
Push(S1,'O'); -- S1 holds O,L,L,E,H
for I in 1..5 loop
Pop(S1, Ch);
Put(Ch); -- displays OLLEH
Push(S2,Ch);
end loop; -- S2 holds H,E,L,L,O
New_Line;
Put_Line("Order is reversed");
for I in 1..5 loop
Pop(S2, Ch);
Put(Ch); -- displays HELLO
end loop;
end Test_ADT_Stack;
-----------------------------------------------------------
我在做什麼錯?我只是想讓它編譯並顯示它應該做的事情。這是一項研究項目類型的任務。但是我不能編譯它,或者不知道我是否正確。
好了,我不克設置錯誤,但我怎樣才能讓它運行我的test_adt_stack.adb文件? 我編譯了,接下來應該運行什麼? – thestralFeather7 2013-04-24 07:16:31
'gnatmake test_adt_stack.adb'應該盡一切努力構建一個可執行文件:查看文件夾內容。包括跟蹤和自動構建所有的依賴關係(不需要Makefile)要運行它,./test_stack應該做到這一點(如果你在Linux上,通常不是路徑的一部分)。當然有一些方法可以將所有中間的.o文件在某處更加整齊,一旦你掌握了基本知識...... – 2013-04-24 08:26:40
Brian,novice7 - 在基於Unix的系統上應該是'。/ test_adt_stack',或者在Windows上只是'test_adt_stack'(也許是'。\ test_adt_stack') 。 – 2013-04-24 15:33:00