[英]Ada Generic Formal Subprograms
我正在上学的Ada作业。 我的老师为我提供了以下代码。 这是用于通用树。
generic
type Item_Type is private;
with procedure put(i : Item_Type);
我在测试文件中创建了一个新的通用树。
package FrequencyTree is new Tree_Pkg (FrequencyRecord);
use FrequencyTree;
现在我得到以下错误。
treetest.adb:12:01: missing actual "put"
treetest.adb:12:01: in instantiation of "Tree_Pkg" declared at tree_pkg.ads:4
treetest.adb:12:01: instantiation abandoned
我知道我应该某处,不知怎么实现这个过程put
,但在何处以及如何?
关于位置和方式,在研究了垃圾神的答案之后 ,请考虑以下事项:
package FrequencyTree is new Tree_Pkg
(Item_Type => FrequencyRecord,
Put => YourOwnPut);
确实必须在执行此实例化之前, FrequencyRecord
和YourOwnPut
必须存在:这里的Ada编译器YourOwnPut
读取您的Ada文本,因此,当它看到实例化时,它必须早先已经看到了两者。
这要求意味着你要么定义YourOwnPut
的实例之前,文本行Tree_Pkg
,使这两个类型FrequencyRecord
和程序YourOwnPut
实例化线之前就已存在。 或者,也许选择其他安排:例如,如果FrequencyRecord
和YourOwnPut
可以一起放置在单独的程序包中,那么您将在实例化行周围任何编译单元的上下文子句中使用该程序包。 (从错误消息来看,它可能称为Treetest
。)说,
with Frequency_Stuff;
...
package FrequencyTree is new Tree_Pkg
(Item_Type => Frequency_Stuff.FrequencyRecord,
Put => Frequency_Stuff.YourOwnPut);
因此,在执行此实例化时,编译器已经看到并编译了软件包Frequency_Stuff
。 IOW,如果将Frequency_Stuff.FrequencyRecord
Item_Type
的实际参数,而Frequency_Stuff.YourOwnPut
Item_Type
Put
的实际参数,则这些实际参数已经存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.