我刚刚升级了一个名为 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
是该规则的一个异常(exception),因为您无法修改成员,因此所有迭代器都是常量。然而,它们仍然支持 iterator
和 const_iterator
,通常一个是另一个的别名,但 roguewave 显然不支持。
将代码中的 iterator
更改为 const_iterator
可能会解决问题,但我建议您尽可能更改 STL 版本。
关于c++ - 在 C++ 中初始化集合迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053841/