Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ada编译混乱_Ada_Gnat - Fatal编程技术网

Ada编译混乱

Ada编译混乱,ada,gnat,Ada,Gnat,我正试着在Ada中了解OOP。为了做到这一点,我需要了解如何使用gnatmake命名、编译和链接包文件 这个网站()有很好的例子,但我不知道如何编译程序的各个部分 我在看e_c22_p2.ada和e_c22_p3.ada。根据这些,我创建了一个名为Conferance1.ads的文件,并在其中添加了e_c22_p2的内容,以及一个名为Vehicle1.adb的文件,并在其中添加了e_c22_p3.ada的内容。我使用了gnatmake Vehicle1.adb,但存在编译错误 e_c22_p2.

我正试着在Ada中了解OOP。为了做到这一点,我需要了解如何使用gnatmake命名、编译和链接包文件

这个网站()有很好的例子,但我不知道如何编译程序的各个部分

我在看e_c22_p2.ada和e_c22_p3.ada。根据这些,我创建了一个名为Conferance1.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.)

文件
e_c22_p2.ada
包含两个程序单元,即规范和包体
传送带1

许多Ada编译器对此非常满意,说服GNAT按原样接受它可能会有些困难,但GNAT的默认设置是每个文件一个程序单元,文件名等于小写的单元名(点替换为连字符),规范为
.ads
,正文为
.adb


GNAT附带了一个工具
gnatchop
(请参阅),该工具接收输入文件,如
e_c22_p2.ada
,并将其拆分为GNAT期望的源文件(
transferance1.ads
transferance1.adb
)。

e_c22_p2.ada
文件包含两个程序单元,包装的规格和主体
传送带1

许多Ada编译器对此非常满意,说服GNAT按原样接受它可能会有些困难,但GNAT的默认设置是每个文件一个程序单元,文件名等于小写的单元名(点替换为连字符),规范为
.ads
,正文为
.adb


GNAT附带了一个工具
gnatchop
(请参阅),该工具接收输入文件,如
e_c22_p2.ada
,并将其拆分为GNAT期望的源文件(
transferance1.ads
transferance1.adb
)。

正如Simon提到的那样,这个.ada文件有两个部分:specs和body。 因此,创建两个文件,如下所示:

  • Transportance1.ads-它包含函数、过程、变量的声明

  • 交通工具1.adb-它包含功能、程序的主体

    第一个文件

  • 第二个文件

    -- Conveyance1.adb
    ------------------------------------------------------------------
    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;
    
    这两个是ada包文件。 为了使用这些文件,您需要创建另一个.adb(比如demo.adb)文件,如下所示。 然后在demo.adb中“使用”和“使用”这些文件

    -- demo.adb
    ------------------------------------------------------------------
    with Conveyance1; use Conveyance1;
    with Ada.Text_IO; use Ada.Text_IO;
    
    
    procedure demo is
        my_scooter : TRANSPORT;
    begin
    
        Set_Values(my_scooter, 3, 250.00);    -- it has a sidecar as well !!!!
    
    end demo;
    
    最后用

    gnatmake demo.adb
    

    它还将编译包含的包。

    正如Simon提到的,这个.ada文件有两个部分:specs和body。 因此,创建两个文件,如下所示:

  • Transportance1.ads-它包含函数、过程、变量的声明

  • 交通工具1.adb-它包含功能、程序的主体

    第一个文件

  • 第二个文件

    -- Conveyance1.adb
    ------------------------------------------------------------------
    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;
    
    这两个是ada包文件。 为了使用这些文件,您需要创建另一个.adb(比如demo.adb)文件,如下所示。 然后在demo.adb中“使用”和“使用”这些文件

    -- demo.adb
    ------------------------------------------------------------------
    with Conveyance1; use Conveyance1;
    with Ada.Text_IO; use Ada.Text_IO;
    
    
    procedure demo is
        my_scooter : TRANSPORT;
    begin
    
        Set_Values(my_scooter, 3, 250.00);    -- it has a sidecar as well !!!!
    
    end demo;
    
    最后用

    gnatmake demo.adb
    

    它还将编译包含的软件包。

    请参阅。TL;DR-在源文件(
    e_c22_p2.ada
    等)上使用
    gnatchop
    创建GNAT期望的源文件。运输工具有-42个轮子有意义吗?@jacobsparrenadersen是的-当你运输洲际弹道导弹(或其他大型物体)时这很可能就是这种车辆的车轮数量。@Darkstkhan-我想你错过了标志。;-)@JacobSparreAndersen哦,天哪,你说得对-我确实错过了xD(-42轮?42轮的车?)看。TL;DR-在源文件(
    e_c22_p2.ada
    等)上使用
    gnatchop
    创建GNAT期望的源文件。运输工具有-42个轮子有意义吗?@jacobsparrenadersen是的-当你运输洲际弹道导弹(或其他大型物体)时这很可能就是这种车辆的车轮数量。@Darkstkhan-我想你错过了标志。;-)@JacobSparreAndersen哦,天哪,你说得对-我确实错过了xD(-42轮?丢失42轮的汽车?)非常感谢你解决了这个问题。我很难理解Ada中的一些概念。网上似乎没有太多容易使用的参考资料,而且我拿到的书也帮不上什么忙。你看过吗?人们对这个问题评价很高。非常感谢你澄清了这个问题。我很难理解Ada中的一些概念。网上似乎没有太多容易使用的参考资料,而且我拿到的书也帮不上什么忙。你看过吗?人们对他的评价很高。