在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库的数据类型变量。

不确定这如何影响迭代器初始化。有人可以将我指向可能导致这一点的正确方向吗?

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方法中称为

最新更新