【问题标题】: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&lt;_Mytree&gt;' 转换为
'std::_Tree_const_iterator&lt;_Mytree&gt;' c:\users\ahakeem\desktop\zipstream\ziparchive.cpp 423 1 zipstream
错误 16 错误 C2440:'initializing':无法从
'std::_Tree_const_iterator&lt;_Mytree&gt;' 转换为
'std::_Tree_const_iterator&lt;_Mytree&gt;' c:\users\ahakeem\desktop\zipstream\ziparchive.cpp 424 1 zipstream

所以基本上编译器说它不能从'std::_Tree_const_iterator&lt;_Mytree&gt;' 转换为'std::_Tree_const_iterator&lt;_Mytree&gt;'

任何想法为什么会发生以及如何解决?

编辑:经过进一步调查,我发现_core-&gt;entries_by_name.begin() 被声明为'std::set&lt;file_info_32*, sort_by_offset&gt;',这显然与其迭代器试图分配给的内容不一致(std::set&lt;file_info_32*, sort_by_offset&gt;)。

将其切换为 _core-&gt;_entries_by_offset.begin(); 有效,因为 _entries_by_offset 是与受让人期望获得的类型一致的类型。

这是否意味着有人可能已经破坏了代码,没有意识到并将其上传到源代码库?或者这种错误分配的场景实际上可以在某些系统上编译吗?

【问题讨论】:

  • 常量正确性?看看你是否能找到错误的非常量。
  • 或者他们是不同的_Mytrees
  • @ildjarn 我确定我没有粘贴错误的错误,这是我在编译时遇到的两个编译错误,如果有影响,我会在我的问题中添加更多内容。
  • 你可能有一个过时的编译器/库,所以它不知道 iterator 和 const_iterator 是常量迭代器,和/或它不提供转换。
  • @Gene : VC++ 2010 的标准库实现非常可靠,所以我认为这在这里不相关,但总的来说是个好建议。

标签: c++ visual-studio-2010 iterator zipstream


【解决方案1】:

我的最佳猜测是,替换 _MyTree 的类是不同的。

在错误下方的输出中查找with _MyTree = SomeClass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2023-03-24
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多