• Domingo 15 de Diciembre de 2024, 07:06

Autor Tema:  Problema Con Iteradores  (Leído 1557 veces)

bosspring

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Problema Con Iteradores
« en: Jueves 7 de Octubre de 2004, 20:17 »
0
He definido una estructura SET para una clase propia que denomino RESULTADO:

set<resultado, less<resultado> > arbolresult

Lo que yo pretendo es recorrer esa estrctura con un iterador

set<resultado, less<resultado> >::iterator itarbolresult = arbolresult.begin();

y cuando encuentre el elemento que estoy buscando, quiero modificar el valor de un atributo, para lo cual en la clase resultado dispongo de una operación que se denomina insertDoc, y a la hora de ejecutarlo me está dando constantemente errores, y probablemente es porqué me he perdido en el concepto de iterador y lo estoy utilizando como un puntero "normal".

Lo que yo pruebo es algo así como esto: itarbolresult->insertDoc() y no me funciona :angry: , y supongo que es un error tonto, simplemente de concepto, pero cuando uno empieza...

Gracias de antemano

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Problema Con Iteradores
« Respuesta #1 en: Domingo 10 de Octubre de 2004, 15:01 »
0
Si 'resultado' no es un typedef de un puntero a algo, sino que son los elementos directamente, tanto ésto
Código: Text
  1.  
  2. (*itarbolresult).insertDoc();
  3.  
  4.  
como ésto
Código: Text
  1.  
  2. itarbolresult-&#62;insertDoc();
  3.  
  4.  
debería funcionar sin problemas. ¿Qué compilador usas?

Un saludo.

Ruben3d

bosspring

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problema Con Iteradores
« Respuesta #2 en: Domingo 10 de Octubre de 2004, 21:55 »
0
En primer lugar agradecerte la respuesta, y paso a comentarte que ya habia contemplado las dos opciones, y con ambas me da problema.

El código exacto de esa instrucción es el siguiente:

itarbolresult->insertDoc(itarboldoc);

donde itarboldoc se define asi :

set<documento, less<documento> >::iterator itarboldoc

La respuesta que da el compilador es la siguiente:

passing `const resultado' as `this' argument of `void resultado::insertDoc(_Rb_tree_iterator<documento,const documento &,const documento *>)' discards qualifiers

Respecto a que compilador utilizo, pues es el que viene incorporado en Dev-C++4, que lo utilizo porque me dijeron que funcionaba muy bien, y yo la verdad es que tengo muy poca experiencia en C++, asi que por eso he trabajado con ello.

Muchas gracias de verdad, y si me puedes aclarar un poco porqué el error y todo eso... pues me harías un gran favor. :D

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Problema Con Iteradores
« Respuesta #3 en: Lunes 11 de Octubre de 2004, 02:00 »
0
Francamente, no veo claro cuál es el origen del error, aunque intuyo que no es culpa del 'set'. Prueba a hacer las siguientes cosas:

1.- Intenta reproducir el error con un elemento ('resultado') que no esté en ningún container. Esto eliminaría la posibiliad de que fuera culpa del 'set'.

2.- Según veo, el parámetro que le pasas a 'insertDoc', 'itarboldoc', es de tipo 'set<documento, less<documento> >::iterator'. Y, en el prototipo del método que aparece en el mensaje de error, se supone que debería ser '_Rb_tree_iterator<documento,const documento &,const documento *>'. Comprueba ésto. (no sé si eso es equivalente a un iterador de un 'set', ya que no estoy acostumbrado a ver la implementación del STL en Dev-Cpp, y no había usado nunca 'set').

3.- Crea una versión lo más reducida posible de tu programa, aunque no haga nada funcional, que reproduzca el problema, de manera que la parte en donde falla sea lo más parecida posible al original. El objetivo sería ver por qué está fallando sobre una cantidad muy pequeña de código, que hará más fácil corregirlo. Si lo haces, ponlo aqui para que pueda estudiarlo y ver si saco el origen del problema.

Espero que ésto te sirva de ayuda.

Un saludo.

Ruben3d