2015-09-01 3 views
1

Я пытаюсь окунуться в ООП в Аде. Для этого мне нужно понять, как назвать, скомпилировать и связать файлы пакетов с gnatmake.Ada компиляция путаницы

Этот сайт (http://www.infres.enst.fr/~pautet/Ada95/chap22.htm) имеет хорошие примеры, но я не понимаю, как скомпилировать различные биты программы.

Я смотрю e_c22_p2.ada и e_c22_p3.ada. Из них я создал файл под названием Conveyance1.ads и добавил в него содержимое e_c22_p2 и файл под названием Vehicle1.adb и добавил там содержимое e_c22_p3.ada. Я использовал gnatmake Vehicle1.adb, но есть ошибки компиляции.

e_c22_p2.ada содержит:

          -- Chapter 22 - Program 2 
package Conveyance1 is 

    -- This is a very simple transportation type. 
    type TRANSPORT is 
     record 
     Wheels : INTEGER; 
     Weight : FLOAT; 
     end record; 

    procedure Set_Values(Vehicle_In : in out TRANSPORT; 
         Wheels_In : INTEGER; 
         Weight_In : FLOAT); 
    function Get_Wheels(Vehicle_In : TRANSPORT) return INTEGER; 
    function Get_Weight(Vehicle_In : TRANSPORT) return FLOAT; 


    -- This CAR type extends the functionality of the TRANSPORT type. 
    type CAR is new TRANSPORT; 

    function Tire_Loading(Vehicle_In : CAR) return FLOAT; 

end Conveyance1; 




package body Conveyance1 is 

-- Subprograms for the TRANSPORT record type. 
procedure Set_Values(Vehicle_In : in out TRANSPORT; 
        Wheels_In : INTEGER; 
        Weight_In : FLOAT) is 
begin 
    Vehicle_In.Wheels := Wheels_In; 
    Vehicle_In.Weight := Weight_In; 
end Set_Values; 

function Get_Wheels(Vehicle_In : TRANSPORT) return INTEGER is 
begin 
    return Vehicle_In.Wheels; 
end Get_Wheels; 

function Get_Weight(Vehicle_In : TRANSPORT) return FLOAT is 
begin 
    return Vehicle_In.Weight; 
end Get_Weight; 


-- Subprogram for the CAR record type. 
function Tire_Loading(Vehicle_In : CAR) return FLOAT is 
begin 
    return Vehicle_In.Weight/FLOAT(Vehicle_In.Wheels); 
end Tire_Loading; 

end Conveyance1; 




-- Results of execution 
-- 
-- (This package cannot be executed alone.) 
+0

См. [Этот ответ] (http://stackoverflow.com/a/14901832). TL; DR - используйте 'gnatchop' в исходных файлах (' e_c22_p2.ada' и т. Д.) Для создания исходных файлов, ожидаемых GNAT. –

+0

Имеет ли смысл средство передвижения иметь -42 колеса? –

+0

@JacobSparreAndersen да, это так - когда вы перевозите ICBM (или другой большой материал), который, скорее всего, будет содержать количество колес такого транспортного средства. – darkestkhan

ответ

6

Файл e_c22_p2.ada содержит две программных единиц, спецификацию и тело пакета Conveyance1.

Многие компиляторы Ada были бы в восторге от этого, и с некоторым трудом можно было бы убедить GNAT принять его как есть, но по умолчанию GNAT ожидает один программный модуль для каждого файла с именем файла, равным название единицы в нижнем регистре (точки заменены дефисом) и .ads для спецификации, .adb для кузова.

ВНСТ поставляется с инструментом gnatchop (см here), который принимает входные файлы, как ваш e_c22_p2.ada и расщепляет их в исходные файлы, которые ВНСТ ожидает (conveyance1.ads и conveyance1.adb).

+0

Большое вам спасибо за очищение этой проблемы. У меня очень трудное время, пытаясь обернуть голову некоторыми концепциями в Аде. Кажется, что нет много простых справочных материалов в Интернете, и книги, которые я получил, тоже не помогают. – user2781042

+0

Вы посмотрели [здесь] (http://www.adaic.org/learn/materials/#ada_2012_books)? Люди высоко отзываются о [Ada Distilled] (http://www.adaic.org/wp-content/uploads/2010/05/Ada-Distilled-24-January-2011-Ada-2005-Version.pdf). –