在C++中初始化set迭代器

roy*_*g86 0 c++ aix rogue-wave

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

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

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

 OverrideSet::iterator itor = this->overrides.begin( );
 while( itor != this->overrides.end( ) )
Run Code Online (Sandbox Code Playgroud)

我在迭代器初始化行上说错了

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".
Run Code Online (Sandbox Code Playgroud)

而EVBusCalOverride只是一个类

class EVBusCalOverride
{

   private:
   RWDate overrideDate;
   bool   businessDay;
};
Run Code Online (Sandbox Code Playgroud)

RWDate是一个属于RogueWave库的日期类型变量.

我不确定这会如何影响迭代器初始化.任何人都能指出我可能造成这种情况的正确方向吗?

Cas*_*Cow 5

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

大多数集合都有两种类型的迭代器,iterator它允许您更改成员,const_iterator哪些不允许.

std::set在某种意义上,您不能修改成员,因此所有迭代器都是const,这是该规则的一个例外.然而,他们仍然支持iterator并且const_iterator通常一个是另一个的别名,但是流氓波显然没有.

更改iterator代码const_iterator可能会修复,但我建议您更改您的STL版本(如果可能).