Estoy tratando de aprender la biblioteca STL y estoy teniendo un problema extraño. Este código se compila perfectamente:Pregunta sobre iterador vectorial en funciones de plantilla
void Show(vector<int> myvec)
{
vector<int>::iterator it;
cout << "Vector contains:";
for(it = myvec.begin(); it < myvec.end(); it++)
{
cout << " " << *it;
}
cout << endl;
}
mientras éste me da un mensaje de error en tiempo de compilación:
template <class T>
void Show2(vector<T> myvec)
{
vector<T>::iterator it;
cout << "Vector contains:";
for(it = myvec.begin(); it < myvec.end(); it++)
{
cout << " " << *it;
}
cout << endl;
}
El error es:
$ g++ hello.cpp
hello.cpp: In function ‘void Show2(std::vector<T, std::allocator<_Tp1> >)’:
hello.cpp:19: error: expected ‘;’ before ‘it’
hello.cpp:21: error: ‘it’ was not declared in this scope
Parece un error muy simple, pero No pude encontrarlo
posible duplicado de [Dónde colocar la "plantilla" y "nombre de tipo" en los nombres dependientes] (http://stackoverflow.com/questions/610245/where-to-put-the-template-and-typename- on-dependent-names) – fredoverflow
Es probable que haya respondido muchas veces antes, pero es difícil buscar los nombres de tipo/dependiente si no sabe que tales términos existen – Erik
@FredOverflow que es un enlace muy bueno y probablemente lo lea ahora mismo. Pero, como dice @Erik, si no sabes cuál es el problema subyacente, buscarás muchos términos específicos y nunca más para el problema más general. Hice muchas búsquedas de iteradores, plantillas, vectores, STL, ... y no encontré nada. Ni siquiera sabía que existía la palabra clave 'typename' (:(sí, soy novato: P). Pensé que era solo un estúpido error de sintaxis. –