Невозможно преобразовать один тип итератора в другой, но оба они одинаковы - PullRequest
8 голосов
/ 29 ноября 2011

Я пытаюсь скомпилировать библиотеку ZipStream , это эффективная оболочка C ++ для zlib.

Прямо сейчас я нахожусь в точке, где я получаю две ошибки компиляции в этих двух строках:

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>'

Есть идеи, почему это происходит и как это исправить?

edit: после дальнейшего изучения я обнаружил, что _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 является типом, совместимым с ожидаемым получателем.

Означает ли это, что кто-то, возможно, нарушил код, не осознал его и загрузил в исходное хранилище? Или этот сценарий ошибочного назначения может на самом деле компилироваться в некоторых системах?

1 Ответ

4 голосов
/ 29 ноября 2011

По-моему, классы, заменяющие _MyTree, отличаются.

Найдите with _MyTree = SomeClass где-то в выходных данных чуть ниже ошибки.

...