0

我刚刚升级了一个名为 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 库的日期类型变量。

我不确定这如何影响迭代器初始化。谁能指出我可能导致这种情况的正确方向?

4

3 回答 3

5

roguewave 是一个非常古老的库。

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

std::set在某种意义上是该规则的一个例外,您不能修改成员,因此所有迭代器都是 const。但是他们仍然支持iteratorand const_iterator,通常其中一个是另一个的别名,但 roguewave 显然不支持。

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

于 2012-10-24T16:52:09.827 回答
1

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

OverrideSet::const_iterator itor = this->overrides.begin( ); 
于 2012-10-24T16:50:52.387 回答
1

错误消息说:

... ::const_iterator

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

于 2012-10-24T16:51:27.617 回答