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:
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?
Perdón, ese error se solucionaba marcando la función draw() como const, mi problema es en otra:
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.
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):
const_cast<cubeBox&>(*i).addCube(x,y,z);