问题标签 [ada95]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ada - 是否可以在 Ada 中将子包作为单独的编译单元
我有一个带有普通规格和正文文件的主包。我正在尝试创建父级的子包,但希望它们在单独的编译文件中。如果它只是一个包体,或者它是一个子程序/proc/func,我可以很容易地完成它。但是,我不能让它让我制作一个子规格文件。
我这样做的原因是因为我想要一个孩子的信息可供同一父母的其他孩子使用。我知道我可以通过在父文件中包含规范部分来做到这一点,但这会使我的父文件变得非常大。
这甚至可能吗,还是我别无选择,只能制作另一个根单元?或者只是把所有规范都留在父母身上?
我试过了:
在父母中:(
package Child1 is separate;
也尝试过 Parent.Child1 但这给出了编译错误
在孩子:
想法?只是不可能?
更新:我正在使用 Green Hills Multi Compiler 进行编译。Ada95语言版本,非OO项目。
interface - 使用 Ada 95 实现类似于接口的最佳方式是什么?
我想实现类似于使用 Ada 95 的接口的东西(因此典型的 OO 接口不可用)。我已经通过在记录中使用泛型和一组“指向方法的指针”来完成它。代码如下。
编辑:我知道可以通过将子程序作为形式参数传递给泛型包来完成,但我想避免向它传递太多参数。
我认为必须有更好的方法来实现我想要的东西,所以我想如果我是对的,如果是这样,我想看一个代码示例。
“接口”在一个名为Drivers
. 那里有一个记录,它包含一个表示驱动程序的通用类型的变量和一个包含其操作的记录:
司机.ads
驱动程序.adb
主文件
oop - 在 Ada 95 中实现具有类范围操作的接口
我正在用Ada 95创建一个程序,但我遇到了问题。具体来说,我正在尝试实现一个执行作为参数给出的函子的类。
我想要实现的行为是:
IF
用过程声明接口Execute
。IF
从一个类派生C
并实现Execute
.- 创建一个类
D
,该类的字段是IF
. 由于IF
无法实例化,我使用access IF
. - 实例化一个类的对象,
D
给它几个C
作为参数的实例。 - 调用数组中包含的
Execute
每个实例。C
D
我已经能够实现上述并编译它,但是当我执行它时,当我尝试将类对象分配C
给D
.
我知道我得到的错误是因为我正在做的分配可能会导致根据 Ada 策略的危险指针错误,所以我的问题是在 Ada 95 中实现这一点的正确方法是什么?
源代码如下。文件中出现错误elevators.adb
,在程序Add_Event_Handler
中,我已经注释了导致它的语句。
函子.ads
电梯.ads
电梯.adb
主文件
编辑
为了修复提到的运行时错误,我进行了以下更改,但我仍然获得了accessibility check failed
.
电梯广告
电梯.adb
ada - 如何在 Ada95 中使用存储池自动解除分配
我读到可以制作用户定义的存储池来简化释放过程,在某些情况下甚至可以自动化它。对这种可能性感到头晕目眩,我一直试图在 Ada95 中制作一个简单的存储池示例,但我遇到了麻烦。
我一直在阅读以下推荐页面以查看实现示例,并尝试在我的机器上运行它。但是,在调整了一些with
anduse
语句以使其编译后,当我运行它时,我发现它有时实际上会失败并声称“调整/完成引发错误”。调整异常处理以进一步传播完整的详细信息,我收到以下消息:
我正在为此苦苦挣扎,因为Unchecked_Deallocation
调用似乎是提供不准确的对象大小导致索引不准确的原因!该new
调用从不报告分配尝试解除分配的金额。由于我对这个概念很陌生,所以我不知道下一步该做什么。如果有人愿意指出我的愚蠢错误或强调我误解的东西,我将非常感激。
这是我修改后的代码,完全按照我的组织方式:
memory_management.ads
内存管理.adb
memory_management-support.ads
memory_management-support.adb
memory_management_test.adb
最后,这是失败时的输出:
ada - => 在 Ada 中是什么意思?
我了解在 Ada 中何时以及如何使用 =>,特别是在使用关键字“others”时,但我不确定它的正确名称,也不知道它是如何以及为什么创建的。Ada 的历史和发展对我来说非常有趣,我会感谢任何人对此的见解。
oop - ADA 面向对象编译错误——我不明白这个错误
我希望你能给我建议。我第一次尝试使用 ADA 95 的面向对象功能,并且我想要两个派生类 cyclicgroup 和 polyggroup 来调用属于它们的基类 abstractGroup 的 put() 方法。但是编译器并没有像我预期的那样跟踪类层次结构,而是告诉我在对 put() 的调用中存在类型不匹配。如何告诉编译器识别对象之间的连接?
以下是 5 个文件,删除了所有无关的内容,并尝试编译:
grpdriver2.adb:
与 Ada.Text_IO;使用 Ada.Text_IO;使用 Ada.Command_Line;使用 Ada.Command_Line;
与groupstuff2;与 subgrphandler2;
..................................................... ..................................................... ......
groupstuff2.ads:
与 Ada.Text_IO;使用 Ada.Text_IO;使用 Ada.Command_Line;使用 Ada.Command_Line;
包 groupstuff2 是
端组材料2;
..................................................... .....................................
groupstuff2.adb:
包体groupstuff2是
端组材料2;
..................................................... ......................
subgrphandler2.ads:
与 Ada.Text_IO;使用 Ada.Text_IO;使用 Ada.Command_Line;使用 Ada.Command_Line;
与groupstuff2;
包 subgrphandler2 是
结束子控制器2;
..................................................... .........................................................
subgrphandler2.adb:
包体 subgrphandler2 是
结束子控制器2;
编译尝试:
C:\GNAT\2018\bin\ceblang>gnatmake grpdriver2 gcc -c grpdriver2.adb grpdriver2.adb:13:36:预期类型“abstractGroup”定义在 groupstuff2.ads:7 grpdriver2.adb:13:36:找到类型“ cyclicGroup”定义在 groupstuff2.ads:16 grpdriver2.adb:18:36:预期类型“abstractGroup”定义在 groupstuff2.ads:7 grpdriver2.adb:18:36:发现类型“polygonGroup”定义在 groupstuff2.ads:25 gnatmake :“grpdriver2.adb”编译错误
ada - Ada95 Traceback 函数不产生输出
使用GNATMAKE 3.13a1 (20000509)
,以下函数似乎没有产生任何结果。也就是说,日志消息永远不会写入日志,也不会记录堆栈跟踪。
周围的日志,执行正常。
像这样调用这个过程~
只给我日志输出:
堆栈跟踪之前 堆栈跟踪
之后
永远不会记录标题--- Stacktrace [ ... ] ---
消息(等)。
GNat / Ada95 有什么特殊的原因导致这种情况吗?我是否必须有一个异常才能获得堆栈跟踪(或类似的?)。
ada - Ada - 提出了可访问性检查
我已经从 Github 下载了这个程序:https ://github.com/raph-amiard/ada-synth-lib
我已经尝试了第一个示例,但遇到了一个例外。如果有人能够让我深入了解为什么会这样,将不胜感激。我已经为此困扰了很长时间,我真的很想让它发挥作用。
我收到的错误是:raised PROGRAM_ERROR : waves.adb:110 accessibility check failed
这是主文件:
这是waves.adb文件
最后,write_to_stdout.adb 文件
感谢您的阅读,任何解决此问题的指导都将是最受赞赏的。
干杯,
劳埃德
ada - 如何使用泛型类型?
我正在处理这里的示例:https ://www.adahome.com/rm95/rm9x-12-08.html
我写了我的generic_stack.ads
:
我的generic_stack.adb
:
我真的不明白如何实际使用Generic_Stack
.
使用简单的generic_stack_test.adb
代码:
Gnat 给我编译错误:
我必须这样做declare
吗Stack_Int_Type
?我不明白如何在过程中使用声明。如果我将 a 传递Stack_Int_Type
给另一个过程,它是否也必须声明类型?
是否可以简单地在 中声明Stack_Int_Type
一次.ads
,并将其用作常规类型?我的书和网页有点建议每次都必须声明它,这听起来很麻烦。
ada - Ada95 调用 C_Mkstemp()
此用于获取临时文件名的代码返回一个空字符串。我正在尝试弄清楚它是如何工作的,因为我能找到的所有 docomkstemp
都说它需要类似的格式/tmp/prefixXXXXXX
,而这里没有使用。
这是电话的旧形式吗?
目录权限会影响执行C_Mkstemp()
吗?
编辑:定义/导入C_Mkstemp
: