gpt4 book ai didi

ada - 操作只能以一种类型进行调度

转载 作者:行者123 更新时间:2023-12-04 22:49:10 24 4
gpt4 key购买 nike

我有一个记录,想要一些访问器功能。

package Some_Package is                                                             

type A is tagged record
First_Field : Integer;
Second_Field : Character;
end record;

type B is private;

function Some_A (Some_B : B) return A;

private

type B is tagged record
Some_A : A;
end record;

end Some_Package;

这是 GNAT 给我的:
some_package.ads:10:13: operation can be dispatching in only one type

这个错误对于 Ada 新手来说有点神秘,我希望能得到一些解释我做错了什么以及如何正确地做。

最佳答案

这是因为 specific rule在 ARM 中;涉及两种标记类型(B 私下),在 Ada 中,子程序可以 dispatch在它的一个参数或函数结果上(实际上,如果所有参数和结果都是相同的标记类型就可以了)。我认为这是 Ada 单继承设计的结果。

你真的需要A被标记? (我希望这是实际问题代码的精简版)。

如果两者都是 AB需要标记,function Some_A 的规范解决方案是使其参数/结果之一class-wide (类范围的参数没有调度):

function Some_A (Some_B : B'Class) return A;

或者
function Some_A (Some_B : B) return A'Class;

取决于从应用程序的角度来看哪个更有意义;猜第二个,然后你可以说
The_A : A’Class := Some_A (Some_B => The_B);

顺便说一句,读者会更清楚,并且不会丢失太多封装,如果你说
type B is tagged private;

关于ada - 操作只能以一种类型进行调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com