elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con iterador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con iterador  (Leído 1,618 veces)
Kherom

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Problema con iterador
« en: 5 Enero 2013, 05:11 am »

Buenas, tengo un una clase que contiene un set de objetos, y un método encargado de llamar al método draw() de todos los objetos:

Código
  1.            for (set<cube>::iterator i=cubes.begin(); i!=cubes.end(); i++)
  2.            {
  3.                /*cube  p = (*i);
  4.                 p.draw();*/
  5.                i->draw();
  6.            }

Tal y como está el compilador me dice:

Cita de: Compilador
[Warning] passing 'const cube' as 'this' argument of 'void cube::draw()' discards qualifiers [-fpermissive]

Con el flag -fpermissive se queda sólo en Warning, pero sin ella es un error y no compila. Sustituyendo el i->draw() por la parte comentada funciona, pero haciendo una copia del objeto, y quiero evitar eso.

¿Alguna idea de qué tengo que hacer?


« Última modificación: 5 Enero 2013, 05:16 am por Kherom » En línea

Kherom

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Problema con iterador
« Respuesta #1 en: 5 Enero 2013, 05:24 am »

Perdón, ese error se solucionaba marcando la función draw() como const, mi problema es en otra:

Código
  1.        void addCube(int x, int y, int z){
  2.            int bx=x/10, by=y/10, bz=z/10;
  3.         cubeBox temp(bx,by,bz);
  4.            if ( cubeBoxData.find(temp) == cubeBoxData.end() ){
  5.             cout << "cubeBox no existe" << endl;
  6.                cubeBoxData.insert(temp);
  7.            }
  8.            set<cubeBox>::iterator i = cubeBoxData.find(temp);
  9.    i->addCube(x,y,z);
  10.        }

En éste caso en la línea 9 tengo el mismo error:

Cita de: Compilador
[Warning] passing 'const cubeBox' as 'this' argument of 'const void cubeBox::addCube(int, int, int)' discards qualifiers [-fpermissive]

Pero no se soluciona añadiendo "const" a addCube() ya que de hecho modifica la clase.

Además, aquí el truco de copiar el contenido a otro objeto no sirve ya que tengo que modificar el objeto contenido en el set y no otro.



« Última modificación: 5 Enero 2013, 05:33 am por Kherom » En línea

Kherom

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Problema con iterador
« Respuesta #2 en: 5 Enero 2013, 19:56 pm »

Vale ya lo he solucionado: Resulta que los iteradores de los set son constantes para evitar que al modificar el objeto se pierda el orden, por ello tenía que hacer un const_cast (ya que en mi caso no modifico las variables que dependen del orden):

Código
  1. const_cast<cubeBox&>(*i).addCube(x,y,z);
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema BlueZScanner y problema de conexión
Hacking Mobile
Kasswed 3 6,287 Último mensaje 6 Mayo 2006, 22:04 pm
por Gospel
como hacer un constructor con un iterador
Java
hardjesjlc 4 3,564 Último mensaje 9 Mayo 2010, 18:55 pm
por biribau
"return" no esta funcionando bien al devolver un iterador
Programación C/C++
Kasswed 1 2,239 Último mensaje 9 Mayo 2012, 13:42 pm
por Kasswed
Problema con iterador a lista de punteros
Programación C/C++
SrCooper 4 2,884 Último mensaje 24 Julio 2013, 15:43 pm
por Eternal Idol
ayuda: kbhit() en iterador en c++
Programación C/C++
Nico01 6 3,238 Último mensaje 19 Julio 2015, 16:58 pm
por Nico01
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines