我正在处理一个最初使用 GNAT 3.13a1 编译的遗留 Ada 95 项目(继承自其他公司)。我已将编译器更新到 GNAT 4.7.4,以访问一些我想在进一步开发中使用的 GNAT 库,但我使用的是 -gnat95 标志。
我无法编译特定文件。这有点奇怪,因为它被命名为“Ada.Calendar.GMT”。这是新编译器的一个问题,它抱怨我无法定义一个包,它是 Ada 包树中包的子包。我认为这不是太大的问题,所以我将包的名称更改为“GMT_Library”,导入 Ada.Calendar 以访问它的类型,并更改文件的名称以适应(以防止进一步的编译器警告)。
但是现在编译器抱怨将 Ada.Calendar.Time 转换为 Duration 是无效的。具体来说,我收到以下错误:
180. D := Duration (Date);
|
>>> illegal operand for numeric conversion
除了更改包的名称和导入 Ada.Calendar 之外,我没有以任何其他方式更改此源文件或相应的规范文件。为什么这是 GNAT 3.13a1 中允许的操作?为什么它不再起作用,有解决办法吗?
编辑:
D 是 Duration,Date 是 Ada.Calendar.Time。
经过进一步调查,最初的开发人员似乎大多复制了此处定义的 Ada.Calendar 的实现。该文件在拆分过程中执行相同的转换。那么为什么标准库可以这样做呢?