繁体   English   中英

在C ++中初始化集合迭代器

[英]Initializing a set iterator in C++

我刚刚升级了一个名为RogueWave的第三方库,该库用于数据库功能。

但是,我收到了一个非常愚蠢的编译错误,而且我不确定它在抱怨什么:

 typedef std::set< EVBusCalOverride > OverrideSet;
 OverrideSet overrides;

 OverrideSet::iterator itor = this->overrides.begin( );
 while( itor != this->overrides.end( ) )

我在迭代器初始化行上收到一条错误消息,说

An object or reference of type "std::set<EVBusCalOverride,std::less<EVBusCalOverride>,std::allocator<EVBusCalOverride> >::iterator" 
cannot be initialized with an rvalue of type    "std::_Tree<std::_Tset_traits<EVBusCalOverride,std::less<EVBusCalOverride>,std::allocator<EVBusCalOverride>,0> >::const_iterator".

EVBusCalOverride只是一个类

class EVBusCalOverride
{

   private:
   RWDate overrideDate;
   bool   businessDay;
};

RWDate是属于RogueWave库的datetype变量。

不确定如何影响迭代器的初始化。 有人可以指出导致问题的正确方向吗?

roguewave是一个非常古老的图书馆。

大多数集合有两种类型的迭代器, iterator允许您更改成员,而const_iterator则不允许。

从某种意义上说, std::set是该规则的例外,因为您无法修改成员,因此所有迭代器都是const。 但是它们仍然支持iteratorconst_iterator ,通常一个是另一个的别名,但roguewave显然不支持。

将代码中的iterator更改为const_iterator可能会解决,但我建议您尽可能更改STL的版本。

看起来覆盖是const。 这段代码是const方法的一部分吗? 在这种情况下,您需要像这样初始化迭代器:

OverrideSet::const_iterator itor = this->overrides.begin( ); 

错误消息显示:

... :: const_iterator

我猜这是在const方法中调用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM