Sto tentando di compilare la libreria ZipStream, è effectivley un wrapper C++ per zlib.Impossibile convertire da un tipo iteratore a un altro, ma entrambi sono identici
In questo momento io sono al punto in cui sto ottenendo due errori di compilazione su queste due linee:
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();
Gli errori sono:
Errore 15 Errore C2440:
'initializing'
: non si può convertire da
'std::_Tree_const_iterator<_Mytree>'
a
'std::_Tree_const_iterator<_Mytree>'
C: \ Users \ ahakeem \ Desktop \ zipstream \ ziparchive.cpp 423 1 zipstream
Errore 16 Errore C2440:'initializing'
: non può convertire da
'std::_Tree_const_iterator<_Mytree>'
a
'std::_Tree_const_iterator<_Mytree>'
C: \ Users \ ahakeem \ Desktop \ zipstream \ ziparchive.cpp 424 1 zipstream
Quindi, in pratica il compilatore dice che non può convertire da 'std::_Tree_const_iterator<_Mytree>'
a 'std::_Tree_const_iterator<_Mytree>'
Qualche idea del perché sta accadendo e come risolvere?
edit: dopo ulteriori indagini ho scoperto che _core->entries_by_name.begin()
è dichiarato come 'std::set<file_info_32*, sort_by_offset>'
, che è ovviamente incoerente con ciò che il suo iteratore sta cercando di essere assegnato a (std::set<file_info_32*, sort_by_offset>
).
Il passaggio a _core->_entries_by_offset.begin();
funziona perché _entries_by_offset
è un tipo coerente con ciò che l'assegnatario si aspetta di ottenere.
Ciò significa che qualcuno potrebbe aver infranto il codice, non l'ha realizzato e caricato sul repository di origine? Oppure questo scenario di assegnazione erosa può effettivamente essere compilato su alcuni sistemi?
Const correctness? Vedi se riesci a trovare qualcosa che è erroneamente non-const. –
o sono diversi '_Mytree's –
@ K-ballo: buon punto! – ildjarn