2011-11-28 10 views
8

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?

+0

Const correctness? Vedi se riesci a trovare qualcosa che è erroneamente non-const. –

+3

o sono diversi '_Mytree's –

+0

@ K-ballo: buon punto! – ildjarn

risposta

4

La mia ipotesi migliore, le classi sostituite per _MyTree sono diverse.

Cerca with _MyTree = SomeClass da qualche parte nell'output appena sotto l'errore.

Problemi correlati