【发布时间】:2015-09-01 16:03:04
【问题描述】:
我正在努力了解 Ada 中的 OOP。为此,我需要了解如何使用 gnatmake 命名、编译和链接包文件。
这个网站(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.)
【问题讨论】:
-
见this answer。 TL;DR - 在源文件(
e_c22_p2.ada等)上使用gnatchop来创建 GNAT 期望的源文件。 -
交通工具有-42个轮子有意义吗?
-
@JacobSparreAndersen 是的,确实如此 - 当您运输洲际弹道导弹(或其他大件物品)时,可能与此类车辆的车轮数量有关。
-
@darkestkhan - 我想你错过了这个标志。 ;-)
-
@JacobSparreAndersen 哦,孩子,你是对的 - 我确实错过了 xD(-42 个轮子?缺少 42 个轮子的汽车?)