Errore di compilazione sciocca utilizzando liste / iteratori (C ++)
-
06-07-2019 - |
Domanda
Quanto segue non viene compilato, e non posso per la vita di me capire perché!
#include <list>
using namespace std;
list<char> myList;
list<int>::iterator it;
it = myList.begin();
L'errore:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::list<_Ty>::_Iterator<_Secure_validation>' (or there is no acceptable conversion)
Soluzione
Ciò accade perché list<char> and list<int>
sono due classi diverse.
Quindi anche i loro iteratori sono di tipi diversi.
Se guardi il codice della classe std :: list vedrai qualcosa come:
typedef _Iterator<_SECURE_VALIDATION_DEFAULT> iterator;
o
typedef _Iterator<bla_bla_bla> iterator;
Ciò significa che il nuovo tipo è definito da ciascun elenco di classi distinto. In altre parole, ogni elenco definisce il proprio tipo di iteratore.
Cambia il tuo codice in questo:
list<char>::iterator it;
Altri suggerimenti
Perché il tipo di iteratore è diverso:
list<char> myList; // char
list<int>::iterator it; // int
Attenzione che il tipo di elenco o qualsiasi altro contenitore non è solo il modello tipo parametro , ma anche tutti gli altri parametri del modello. Ad esempio:
list<char, MyAllocator> mylist;
list<char, YourAllocator> yourlist;
// typeof mylist != type of yourlist (!!!)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow