Невозможно преобразовать один тип итератора в другой, но оба они идентичны.

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

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

std::set::iterator first  = _core->_entries_by_name.begin();
std::set::iterator last   = _core->_entries_by_name.end();

Ошибки:

Ошибка 15, ошибка C2440: «инициализация» : невозможно преобразовать из
'std :: _ Tree_const_iterator <_mytree>' в
'std :: _ Tree_const_iterator <_mytree>' c: \ users \ ahakeem \ desktop \ zipstream \ ziparchive.cpp 423 1 zipstream
Ошибка 16, ошибка C2440: «инициализация» : невозможно преобразовать из
'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> ' to 'std :: _ Tree_const_iterator <_mytree>'

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

edit: после дальнейшего исследования я обнаружил, что _core-> entries_by_name. begin () объявлен как 'std :: set ' , что явно несовместимо с тем, что его итератор пытается назначить ( std :: set ).

Переключение на _core -> _ entries_by_offset.begin (); работает, потому что _entries_by_offset - это тип, соответствующий тому, что получатель ожидает получить.

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

8
задан Charles 29 November 2011 в 06:50
поделиться