【发布时间】:2015-03-27 01:57:33
【问题描述】:
我想在 Ada 中的 hashed_set 的元素上返回一个 Forward_Iterator,如下面的代码所示:
with Ada.Containers.Hashed_Sets;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Strings.Unbounded.Hash;
with Ada.Text_IO; use Ada.Text_IO;
procedure debug is
package my_set is new Ada.Containers.Hashed_Sets
(Element_Type => Unbounded_String,
Hash => Ada.Strings.Unbounded.Hash,
Equivalent_Elements => "=");
function get_Iterator
(some_set : my_set.set)
return my_set.Set_Iterator_Interfaces.Forward_Iterator'Class is --' Highlight fix
begin
return some_set.Iterate;
end;
set_1 : my_set.set;
begin
set_1.insert(To_Unbounded_String("element"));
for E in get_Iterator (some_set => set_1) loop
put_line ("i iterate!");
end loop;
end debug;
问题是代码引发了程序错误 “引发的 PROGRAM_ERROR:debug.adb:6 finalize/adjust 引发的异常”我不明白......(我在 Ubuntu 14.04 下使用 GNAT Ada GPL 2014)
有没有办法修复代码?或者是否有另一种可能在 hashed_set 上返回迭代器?一个应用程序是例如当 hashed_set 是私有记录的一部分时,应该只能从外部迭代元素,而不能更改集合本身。
提前致谢!
PS:这是我在这里的第一个问题,所以如果您有任何改进问题的提示,请告诉我:)
【问题讨论】:
-
片段不适用于 Ada;据我所知,它们只适用于 JavaScript!我在 GCC 5.0.0 上遇到同样的错误,但在 GCC 4.9.1 上没有。
标签: iterator containers ada