[英]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。 但是它们仍然支持iterator
和const_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.