On 10/4/07, John Knight <[EMAIL PROTECTED]> wrote:
>
>
> buenas
> tengo problemas con un template: kiero hacer un template de una clase Grafo
> para que pueda soportar cualkier clase Vertice y Arco
> como lei en un post anterior, hay q poner todo en un mismo .h (ya esta eso)
> el tema es q hay algo q no estoy haciendo bien y llora al instanciar un
> iterador...
>
> la clase grafo seria como sigue:
>
> template<class TVert, typename vcomp,class TArco>
> class Grafo {
>     private:
>         vector <TArco*> _arcos;
>         ............
> }
>
> en el mismo .h, en el destructor trato de recorrer dicho vector para liberar
> memoria
>
> template<class TVert, typename vcomp,class TArco>
> Grafo<TVert,vcomp,TArco>::~Grafo() {

(-)     for(vector<TArco*>::iterator itera = _arcos.begin();
(+)   for( typename vector<TArco*>::iterator itera = _arcos.begin();

>           itera != _arcos.end(); itera++ )
>          delete *itera;
>       ............
> }
>
> pero aca se queja del iterador
> basicamente lo primero q tira de error es esto (omitiendo errores anidados):
>
>  error: expected `;' before 'itera'
>  error: 'itera' was not declared in this scope

Cuando accedes a un tipo (como iterator) dentro de una especialización
de template genérica le tenes que indicar al compilador que lo que
estas deseando es un tipo (de ahí la palabra typename).
Esto viene a cuento de que hasta que no especialices el template con
tipos concretos el compilador no puede saber si "::iterator" va a ser
un tipo de dato, el nombre de una función o una variable.

Un abrazo
Mat

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a