Próbuję skompilować bibliotekę ZipStream, jest to efektywne opakowanie C++ dla zlib.Nie można przekonwertować z jednego typu iteratora na inny, ale oba są dokładnie takie same
Teraz jestem w punkcie, gdzie dostaję dwa błędy kompilacji na te dwie linie:
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();
błędy są:
Error 15 error C2440:
'initializing'
: nie można przekonwertować z
'std::_Tree_const_iterator<_Mytree>'
do
'std::_Tree_const_iterator<_Mytree>'
c: \ Users \ ahakeem \ pulpit \ zipstream \ ziparchive.cpp 423 1 zipstream
Error 16 error C2440:'initializing'
: nie można przekonwertować z
'std::_Tree_const_iterator<_Mytree>'
do
'std::_Tree_const_iterator<_Mytree>'
C: \ Users \ ahakeem \ Pulpit \ zipstream \ ziparchive.cpp 424 1 zipstream
Więc zasadniczo kompilator mówi, że nie może przelicz z 'std::_Tree_const_iterator<_Mytree>'
na 'std::_Tree_const_iterator<_Mytree>'
Jakieś pomysły, dlaczego tak się dzieje i jak je naprawić?
edit: po dalsze dochodzenie Znalazłem że _core->entries_by_name.begin()
jest zadeklarowana jako 'std::set<file_info_32*, sort_by_offset>'
, co jest oczywiście inconsistant z tym, co jej iterator stara się być przypisane do (std::set<file_info_32*, sort_by_offset>
).
Przełączanie na _core->_entries_by_offset.begin();
działa, ponieważ _entries_by_offset
jest typem zgodnym z tym, co cesjonariusz spodziewa się uzyskać.
Czy to oznacza, że ktoś mógł złamać kod, nie zdał sobie z tego sprawy i przesłał go do źródła repo? A może ten scenariusz błędnego przypisania rzeczywiście się kompiluje w niektórych systemach?
Const poprawność? Sprawdź, czy możesz znaleźć coś, co jest błędnie niestałe. –
lub są różne '_Mytree's –
@ K-ballo: Dobra rada! – ildjarn