无法从一种迭代器类型转换为另一种,但两者完全相同
Posted
技术标签:
【中文标题】无法从一种迭代器类型转换为另一种,但两者完全相同【英文标题】:Cannot convert from one iterator type to another but both are the exact same 【发布时间】:2011-11-28 23:46:15 【问题描述】:我正在尝试编译 ZipStream 库,它实际上是 zlib 的 C++ 包装器。
现在我正处于这两行出现两个编译错误的地步:
std::set<file_info_32*, sort_by_offset>::iterator first = _core->_entries_by_name.begin();
std::set<file_info_32*, sort_by_offset>::iterator last = _core->_entries_by_name.end();
错误是:
错误 15 错误 C2440:
'initializing'
:无法从'std::_Tree_const_iterator<_Mytree>'
转换为'std::_Tree_const_iterator<_Mytree>'
c:\users\ahakeem\desktop\zipstream\ziparchive.cpp 423 1 zipstream 错误 16 错误 C2440:'initializing'
:无法从'std::_Tree_const_iterator<_Mytree>'
转换为'std::_Tree_const_iterator<_Mytree>'
c:\users\ahakeem\desktop\zipstream\ziparchive.cpp 424 1 zipstream
所以基本上编译器说它不能从'std::_Tree_const_iterator<_Mytree>'
转换为'std::_Tree_const_iterator<_Mytree>'
任何想法为什么会发生以及如何解决?
编辑:经过进一步调查,我发现_core->entries_by_name.begin()
被声明为'std::set<file_info_32*, sort_by_offset>'
,这显然与其迭代器试图分配给的内容不一致(std::set<file_info_32*, sort_by_offset>
)。
将其切换为 _core->_entries_by_offset.begin();
有效,因为 _entries_by_offset
是与受让人期望获得的类型一致的类型。
这是否意味着有人可能已经破坏了代码,没有意识到并将其上传到源代码库?或者这种错误分配的场景实际上可以在某些系统上编译吗?
【问题讨论】:
常量正确性?看看你是否能找到错误的非常量。 或者他们是不同的_Mytree
s
@ildjarn 我确定我没有粘贴错误的错误,这是我在编译时遇到的两个编译错误,如果有影响,我会在我的问题中添加更多内容。
你可能有一个过时的编译器/库,所以它不知道 iterator 和 const_iterator 是常量迭代器,和/或它不提供转换。
@Gene : VC++ 2010 的标准库实现非常可靠,所以我认为这在这里不相关,但总的来说是个好建议。
【参考方案1】:
我的最佳猜测是,替换 _MyTree
的类是不同的。
在错误下方的输出中查找with _MyTree = SomeClass
。
【讨论】:
以上是关于无法从一种迭代器类型转换为另一种,但两者完全相同的主要内容,如果未能解决你的问题,请参考以下文章