C ++, iterador a std :: map

Cómo declarar un iterador a

std::map <T, Point <T> *> ,

dónde:

template <typename T>
struct TList
{
    typedef std::vector < std::map <T, Point <T> *> >  Type;
};

En el siguiente código

int main ()
{
    ....
    std::map <T, Point <T> *> ::iterator i_map;  //Error
    ...
}

g ++ muestra este error:

error: dependent-name `  std::map<T,Point<T>*,std::less<_Key>,std::allocator<std::pair<const T, Point<T>*> > >::iterator' is parsed as a non-type, but instantiation yields a type
note: say `typename  std::map<T,Point<T>*,std::less<_Key>,std::allocator<std::pair<const T, Point<T>*> > >::iterator' if a type is meant

preguntado el 16 de mayo de 11 a las 18:05

4 Respuestas

Utilización de typename como:

  typename std::map<T, Point <T> *>::iterator i_map;
//^^^^^^^^ here!

Porque iterator es un nombre-dependiente (ya que depende del mapa tipo argumento T), asi que typename se requiere aquí.

Lea estas preguntas frecuentes para obtener una explicación detallada:

¿Dónde y por qué tengo que poner las palabras clave "plantilla" y "nombre de tipo"?

contestado el 23 de mayo de 17 a las 15:05

¿Afecta la regulación de la typename std::map <T, Point <T> *> ::iterator i_map; ¿trabajo?

contestado el 16 de mayo de 11 a las 22:05

Qué pasa typename TList<T>::Type::value_type::iterator?

contestado el 16 de mayo de 11 a las 22:05

Poner "typename"antes de la línea de error: std::map <T, Point <T> *> ::iterator i_map;.

Ejemplo:

typename vector<T>::iterator vIdx; 

// On your case : typename std::map <T, Point<T>*>::iterator i_map;

vIdx= find(oVector->begin(), oVector->end(), pElementToFind); //To my case

Respondido el 06 de junio de 13 a las 23:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.