Problema con iterador

Iniciado por Kherom, 5 Enero 2013, 05:11 AM

0 Miembros y 1 Visitante están viendo este tema.

Kherom

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 (cpp) [Seleccionar]

           for (set<cube>::iterator i=cubes.begin(); i!=cubes.end(); i++)
           {
               /*cube  p = (*i);
               p.draw();*/
               i->draw();
           }


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?

Kherom

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

Código (cpp) [Seleccionar]

       void addCube(int x, int y, int z){
           int bx=x/10, by=y/10, bz=z/10;
        cubeBox temp(bx,by,bz);
           if ( cubeBoxData.find(temp) == cubeBoxData.end() ){
            cout << "cubeBox no existe" << endl;
               cubeBoxData.insert(temp);
           }
           set<cubeBox>::iterator i = cubeBoxData.find(temp);
   i->addCube(x,y,z);
       }


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.


Kherom

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 (cpp) [Seleccionar]
const_cast<cubeBox&>(*i).addCube(x,y,z);