【发布时间】: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 是与受让人期望获得的类型一致的类型。
这是否意味着有人可能已经破坏了代码,没有意识到并将其上传到源代码库?或者这种错误分配的场景实际上可以在某些系统上编译吗?
【问题讨论】:
-
常量正确性?看看你是否能找到错误的非常量。
-
或者他们是不同的
_Mytrees -
@ildjarn 我确定我没有粘贴错误的错误,这是我在编译时遇到的两个编译错误,如果有影响,我会在我的问题中添加更多内容。
-
你可能有一个过时的编译器/库,所以它不知道 iterator 和 const_iterator 是常量迭代器,和/或它不提供转换。
-
@Gene : VC++ 2010 的标准库实现非常可靠,所以我认为这在这里不相关,但总的来说是个好建议。
标签: c++ visual-studio-2010 iterator zipstream