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)
È stato utile?

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
scroll top