我刚刚升级了一个名为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。但是,它们仍然支持iterator
和const_iterator
,通常是另一个是另一个别名,但Roguewave显然不属于。
将代码中的iterator
更改为const_iterator
可能会解决,但是我建议您在可能的情况下更改STL的版本。
看起来覆盖是const。该代码是const方法的一部分吗?在这种情况下,您需要像这样初始化迭代器:
OverrideSet::const_iterator itor = this->overrides.begin( );
错误消息说:
... :: const_iterator
我猜这是在const
方法中称为