Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Pasar función a QSORT usando clases!

Estas en el tema de Pasar función a QSORT usando clases! en el foro de C/C++ en Foros del Web. 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++, ...
  #1 (permalink)  
Antiguo 24/05/2011, 11:34
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 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
  #2 (permalink)  
Antiguo 24/05/2011, 12:14
_Lx
 
Fecha de Ingreso: mayo-2011
Mensajes: 17
Antigüedad: 13 años
Puntos: 11
Busqueda Respuesta: Pasar función a QSORT usando clases!

No te puedo explicar porque tengo que salir...

Acá está solucionado (la función cmpValores no puede pertenecer a la clase):

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int cmpValores( const void* v1, const void* v2 ){
  5.    
  6.       int vAux1 = *(int *)v1;
  7.       int vAux2 = *(int *)v2;
  8.       if( vAux1 < vAux2 )
  9.          return -1;    // si pones acá 1 y en el otro -1, se ordenará descendentemente
  10.       if( vAux1 > vAux2 )
  11.          return 1;
  12.       return 0;
  13. }
  14. class Modulo{
  15.  
  16.   public:
  17.  
  18.   void ordena( int valores[], int dim){
  19.      qsort( valores, dim, sizeof(int), cmpValores);
  20.   }
  21. };
  22.  
  23. int main()
  24. {
  25.    Modulo M;
  26.    int nums[10] = {7,5,4,6,9,1,8,3,10,2}, i;
  27.    
  28.    M.ordena( nums, 10);
  29.    for(i = 0; i < 10; i++)
  30.       printf("%d ", nums[i]);
  31.      
  32.    printf("\n\n");
  33.    system("pause");
  34.    return EXIT_SUCCESS;
  35. }
Nos vemos!
  #3 (permalink)  
Antiguo 24/05/2011, 12:34
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Pasar función a QSORT usando clases!

No manches, muchas gracias, ya no manda error...
Creo tener una idea del por qué mandaba error ahora que veo la solución...
Realmente agradezco tu atención y tu tiempo, toda tu ayuda...

Etiquetas: clases, punteros, qsort
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:45.