Map 为了使用多态性,可以在Ada中实例化带有标记记录类型的映射容器吗?

Map 为了使用多态性,可以在Ada中实例化带有标记记录类型的映射容器吗?,map,polymorphism,containers,ada,Map,Polymorphism,Containers,Ada,我想要一个映射容器,它将包含一个标记的记录类型,所以我编写了这个程序,但GNAT编译器没有编译它: type http_response is tagged private; package map_package is new Ada.Containers.Ordered_Maps (Key_Type => Unbounded_String, Element_Type => http_response); 我还有一些编译错误: http.ads:47:04: i

我想要一个映射容器,它将包含一个标记的记录类型,所以我编写了这个程序,但GNAT编译器没有编译它:

type http_response is tagged private;
package map_package is new Ada.Containers.Ordered_Maps
    (Key_Type => Unbounded_String,
     Element_Type => http_response);
我还有一些编译错误:

http.ads:47:04: instantiation error at a-coorma.ads:199
http.ads:47:04: premature use of type with private component
http.ads:47:105: premature use of private type
实际上,我希望使用多态性,因为我的映射将包含从http\U响应类型继承的其他标记记录类型

如何更正此代码

如果我这样更正代码:

package map_package is new Ada.Containers.Ordered_Maps
    (Key_Type => Unbounded_String,
     Element_Type => http_response'Class);
我得到了这种错误:

http.ads:47:04: instantiation error at a-coorma.ads:195
http.ads:47:04: class-wide subtype with unknown discriminants in component declaration
http.ads:47:04: instantiation error at a-coorma.ads:199
http.ads:47:04: premature use of type with private component
http.ads:47:118: premature use of type with private component

如中所述,“类范围的子类型被定义为具有未知的判别式,因此是一个不确定的子类型。”而不是,您可以实例化。

http\U请求或http\U响应?声明和泛型参数不匹配。但是如果您想要多态性,我认为您需要类范围的类型:
Element\u Type=>http\u response'class
@Brian Drummond:我的映射将包含http\u response,我刚刚做了一个复制粘贴错误。当我添加“'Class”,我有这些错误:http.ads:47:04:a-coorma的实例化错误。ads:195 http.ads:47:04:class-wide子类型,在组件声明http中具有未知的鉴别器。ads:47:04:a-coorma的实例化错误。ads:199 http.ads:47:04:过早使用私有组件http的类型。ads:47:118:过早使用私有组件的类型请更新您的问题以(a)更正复制粘贴错误,以及(b)包含错误消息,格式为代码,以便更易于阅读。在编辑时,可以将标题中的“ADA”改为“ADA”;这不是首字母缩略词。欢迎来到Stack Overflow!我已经为你整理了一下格式。在代码中插入换行符通常会很有帮助,这样读者就不必横着滚动就能看到所有内容。由于markdown对代码块和引用的文本有自己的语法,所以很少需要使用显式HTML。另请参见。感谢您的建议,我有一个错误:http。ads:47:116:过早使用私有类型感谢您的回答,我找到了解决方案。这只是一个可见度的问题。