Ada Maps:没有可见的子程序符合" ="的规范。

时间:2014-08-17 09:41:43

标签: ada

我一直在使用Ada.Containers.Indefinite_Hased_Maps来创建我自己的自定义散列映射,并且在我尝试使用向量作为元素类型之前它运行良好。以下是有问题的代码示例:

   package String_Vectors is new Ada.Containers.Vectors(Element_Type => Unbounded_String, Index_Type => Natural);
   subtype String_Vector is String_Vectors.Vector;

   package Positive2StringVector_HashMaps is new Ada.Containers.Indefinite_Hashed_Maps --Compiler fails here
     (Element_Type    => String_Vector,
      Key_Type        => Positive,
      Hash            => Positive_Hash,
      Equivalent_Keys => Positive_Equal);

基本上,我不能Positive2StringVector_HashMaps打包,因为编译器提出了:

no visible subprogram matches the specification for "="

根据我的理解,它找不到String_Vector的等号运算符,我是否正确?如果我是,实施它的正确方法是什么?如果我不是,我做错了什么?

1 个答案:

答案 0 :(得分:4)

您无需实施

function “=“ (L, R : String_Vectors.Vector) return Boolean 

你自己,因为String_Vectors中已有一个;见ALRM A.18.2(12)。所以你写了

package Positive2StringVector_HashMaps is new Ada.Containers.Indefinite_Hashed_Maps
 (Element_Type    => String_Vector,
  Key_Type        => Positive,
  Hash            => Positive_Hash,
  Equivalent_Keys => Positive_Equal,
  “=“             => String_Vectors.”=");

顺便提一下,您是否有理由在Ada.Containers.Vectors使用Unbounded_String而不是Indefinite_Vectors上使用String? (想要改变包含字符串的长度将被视为一个好理由!)