Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/05/2011, 11:34
Beaker
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 16 años, 3 meses
Puntos: 0
Pasar función a QSORT usando clases!

Que tal, buen día, tengo un gran problema y quisiera saber si alguién me pudiera ayudar...
El problema es que tengo un programa en C++, donde estoy usando clases, y tengo que usar la función "qsort" cuya función pertenece a la clase, sin embargo, me manda error.
Aquí muestro como tengo implementada la función que compara, y la función que manda a llamar a "qsort", las dos dentro de la clase Modulo.

Código:
int cmpPesos( const void* p1, const void* p2 );
void ordena();

class Modulo{
  public:
    ...
   int cmpValores( const void* v1, const void* v2 ){
      int vAux1 = v1;
      int vAux2 = v2;

      if( vAux1 > vAux2 )
         return -1;
      if( vAux1 < vAux2 )
         return 1;
      return 0;
  }

  void ordena(){
     ...
     qsort( valores, total, sizeof( valores ), &cmpValores );
     ...
  }
}
El error que me manda es el siguiente:
Código HTML:
...
main.cpp:936: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.  Say ‘&Modulo::cmpValores’
main.cpp:936: error: cannot convert ‘int (Modulo::*)(const void*, const void*)’ to ‘int (*)(const void*, const void*)’ for argument ‘4’ to ‘void qsort(void*, size_t, size_t, int (*)(const void*, const void*))’
make[2]: *** [CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2
Agradezco de antemano la atención y la ayuda...
Saludos