Erro de compilação boba usando listas / iteradores (C ++)
-
06-07-2019 - |
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)
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