c++ - 在 C++ 中初始化集合迭代器

标签 c++ aix rogue-wave

我刚刚升级了一个名为 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),因为您无法修改成员,因此所有迭代器都是常量。然而,它们仍然支持 iteratorconst_iterator,通常一个是另一个的别名,但 roguewave 显然不支持。

将代码中的 iterator 更改为 const_iterator 可能会解决问题,但我建议您尽可能更改 STL 版本。

关于c++ - 在 C++ 中初始化集合迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053841/

相关文章:

c++ - Makefile 不指定源文件

python-2.7 - AIX系统无法安装pip

unix - 无法构建数组并在 AWK 中打印出来

c++ - 在 Windows 10 上使用 C++ 线程的问题(使用 g++ 作为编译器)

c++ - 指针和递归

c++ - Solaris 进程内存使用量增加但不会永远增加

c++ - 为什么 RWDBManager::database 需要共享库名?

c++ - vector 迭代器不兼容 : DEBUG

c++ - 在 Go 中使用 C++ : error: 'reinterpret_cast' undeclared

bash - [ : -eq: unary operator expected