В принципе, у меня есть 2 файла (.adb и .ads). Я совершенно новичок в Ada, а также как скомпилировать 2 файла. Программа имеет базовую реализацию стека. Я получил эту ошибку компиляции, когда я скомпилировал файл .adb.Ada beginner Stack program
$ 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;
-----------------------------------------------------------
Что я делаю неправильно? Я просто хочу, чтобы он компилировал и показывал, что он должен делать. Это было исследование вида программы назначения. Но я не могу заставить его скомпилировать или не знаю, правильно ли я делаю это.
Хорошо, таким образом я не г etting ошибка, но как я могу заставить ее запустить файл test_adt_stack.adb? Я скомпилировал, что мне следует запустить дальше? – thestralFeather7
'gnatmake test_adt_stack.adb' должен сделать все, чтобы создать исполняемый файл: посмотрите содержимое папки. Включая отслеживание и автоматическое построение всех зависимостей (не требуется Makefile!) Чтобы запустить его, нужно выполнить ./test_stack (если вы находитесь в Linux, где обычно не входит в путь). Конечно, есть способы поместить все промежуточные файлы .o где-то более аккуратные, как только у вас есть основы ... –
Brian, novice7 - это должно быть './test_adt_stack' в системах на базе Unix или просто' test_adt_stack' (возможно, '. \ test_adt_stack') в Windows , –