Pergunta

O seguinte não é compilado, e eu não posso para a vida de mim ver o porquê!

#include <list>
using namespace std;

list<char> myList;
list<int>::iterator it;

it = myList.begin();

O erro:

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)
Foi útil?

Solução

Isso acontece porque list<char> and list<int> são duas classes diferentes. Portanto, seus iteradores também são tipos diferentes.
Se você olhar para o código de classe STD :: List, verá algo como:

typedef _Iterator<_SECURE_VALIDATION_DEFAULT> iterator;

ou

typedef _Iterator<bla_bla_bla> iterator;

Isso significa que o novo tipo é definido por cada lista de classe distinta. Em outras palavras, cada lista define seu próprio tipo de iterador.

Altere seu código para isso:

list<char>::iterator it;

Outras dicas

Porque o tipo de iterador é diferente:

list<char> myList; // char
list<int>::iterator it; // int

Cuidado que o tipo de lista ou qualquer outro contêiner não é apenas o modelo modelo parâmetro, mas todos os outros parâmetros de modelo também. Por exemplo:

list<char, MyAllocator> mylist;
list<char, YourAllocator> yourlist;
// typeof mylist != type of yourlist      (!!!)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top