[c++] probleme pour une fonction :(

probleme pour une fonction :( [c++] - Programmation

Marsh Posté le 05-01-2002 à 15:04:26    

salut les gens,
 
 
voilà, j'ai une classe  
 
class Tevenement
{
   string brol;
 
   public:
      string namek() { return brol;}
}
 
et je dois faire une fonction qui doit être exactement du type :
 
int sort_function( const void *a, const void *b)
{
 
}
 
J'arrive pas à atteindre *a->namek (ce qui me semble normal mais bong, j'arrête pas de rien comprendre ces temps-ci :sweat: )
 
Donc, comment faire ?


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 15:04:26   

Reply

Marsh Posté le 05-01-2002 à 15:06:48    

je complete parce que j'ai pit-être mal compris le problème et je demande pit-être n'importe quoi...
 
 
En fait, j'ai un vecteur de pointeurs vers des tevenements.
 
Et je dois trier ces tevenements avec la fonction qsort().
 
Mais j'arrive pas à atteindre le membre de la classe par lequel je veux trier.


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 15:07:51    

note :
 
//*****************************************************
 
void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));
 
//*****************************************************
 
exemple d'utilisation de qsort:
*******************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };
 
int main(void)
{
   int  x;
 
   qsort((void *)list, 5, sizeof(list[0]), sort_function);
   for (x = 0; x < 5; x++)
      printf("%s\n", list[x]);
   return 0;
}
 
int sort_function( const void *a, const void *b)
{
   return( strcmp((char *)a,(char *)b) );
}

 

[edtdd]--Message édité par art_dupond--[/edtdd]


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 21:38:23    

Bong, ma fonction marche, mais pas quand je l'emploie dans qsort
 
int sort_function(const void *a, const void *b)
{
 
   tevenement *alpha, *beta;
   string corde, cordelette;
 
   alpha = (tevenement*)a;
   beta = (tevenement*)b;
 
//   corde = alpha->namek();
//   cordelette = beta->namek();
 
   return 1;
//   return compare(corde, cordelette);
}
 
Il me fait une erreur à corde = alpha->namek()
 
 
J'comprends pas :(


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 21:41:14    

ben dis nous l'erreur
 
pis sinon fais gaffe, un coup tu appelles ta classe Tevenement et un coup tevenement
 
le C++ est case sensitive

Reply

Marsh Posté le 05-01-2002 à 21:43:10    

pour le premier post c'est peut etre pcq le qsort veut une fonction et non une méthode (méthode = fonction dont le premier paramètre [caché] est le pointeur vers l'objet "this" ) que ca marchait pas.

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-01-2002 à 21:45:24    

oui oui, c'est tevenement (j'ai pas fait gaffe en recopiant)
 
 
sinon, l'erreur, c'est :
 
 
Project vecteur.exe raised exception class AEaccessViolation with message 'Access Violation at address 00401446. Read of address FFFFFFFF'. Process stoped. Use step or Run to continue. :sweat:


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 21:46:44    

Ah c'est donc pas une erreur de compilation ! Fo l'dire! :D
 
 
Donc la tu as un access violation, cela signifie que tu lit/ecrit la ou tu n'as pas droit
 
 
Verifie tes pointeurs, verifie que tu donne des parametres valide a ta fonction et tout ca ....

Reply

Marsh Posté le 05-01-2002 à 21:52:05    

ce qu'il y a, c'est que la fonction marche quand je l'appelle du main()
 
Mais elle veut pas marcher "dans" qsort() (la vilaine :D )
 
Donc, je me dis que ca vient d'un truc avec qsort. Mais je ne vois pas quoi...


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 21:53:56    

donne nous un exemple : comment tu fais ton appel ?

Reply

Marsh Posté le 05-01-2002 à 21:53:56   

Reply

Marsh Posté le 05-01-2002 à 21:57:27    

Code :
  1. int sort_function(const void *a, const void *b);
  2. void main()
  3. {
  4.    tdroit td(0,"neuneu",125.55,"ypou" );
  5.    tdroit td1(0,"naunau",253.1,"protte" );
  6.    tpermission tp(1,"yaya",56.36,25);
  7.    tpermission tp1(1,"yaya",57.36,285);
  8.    tevenement *vecteur[MAX];
  9.    vecteur[0] = &td;
  10.    vecteur[1] = &td1;
  11.    vecteur[2] = &tp;
  12.    vecteur[3] = &tp1;
  13. //   qsort((void *)vecteur, 4, sizeof(vecteur[0]), sort_function);
  14.    sort_function(vecteur[0], vecteur[1]);   // ca marche
  15.    int attendre;
  16.    cin >> attendre;
  17. }
  18. int sort_function(const void *a, const void *b)
  19. {
  20.    tevenement *alpha, *beta;
  21.    string corde, cordelette;
  22.    alpha = (tevenement*)a;
  23.    beta = (tevenement*)b;
  24.    corde = alpha->namek();
  25.    cordelette = beta->namek();
  26.    return 1;
  27. //   return compare(corde, cordelette);
  28. }


 
 
mais ca marche pas avec qsort() :sweat:

 

[edtdd]--Message édité par art_dupond--[/edtdd]


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 21:59:02    

mes classes (on ne sait jamais)
 

Code :
  1. #include <vcl.h>
  2. #include <iostream.h>
  3. #include <fstream.h>
  4. #include <iomanip.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <math.h>
  8. #define MAX 100
  9. class tevenement
  10. {
  11. short flag;
  12. string name;
  13. float time;
  14. public:
  15.       tevenement() { flag=0; name=""; time=0;}
  16.  tevenement(short drapeau, string nom, float temps) { flag=drapeau; name=nom; time=temps;}
  17.       virtual void affiche() { cout << flag << " " << name << " " << time << " ";}
  18.  ~tevenement() {}
  19.       string namek() { return name;}
  20.       float tempete() { return time;}
  21.      tevenement & operator=(const tevenement &);
  22. };
  23. tevenement & tevenement::operator=(const tevenement & kablouille)   //------  =
  24. {
  25.    flag = kablouille.flag;
  26.    name = kablouille.name;
  27.    time = kablouille.time;
  28.    return *this;
  29. }
  30. class tdroit : public tevenement
  31. {
  32. string fichier;
  33. public:
  34.       tdroit() { fichier="";}
  35.  tdroit(short, string, float, string);
  36.       void affiche()
  37.       {
  38.          cout << "tdroit\n";
  39.          tevenement::affiche();
  40.          cout << fichier << endl;
  41.       }
  42.  ~tdroit() {}
  43. };
  44. class tpermission : public tevenement
  45. {
  46. float number;
  47. public:
  48.       tpermission() { number=0;}
  49.  tpermission(short, string, float, float);
  50.       void affiche()
  51.       {
  52.          cout << "tpermission\n";
  53.          tevenement::affiche();
  54.          cout << number << endl;
  55.       }
  56.  ~tpermission() {}
  57. };
  58. tdroit::tdroit(short court, string corde, float bateau, string fil) : tevenement(court, corde, bateau)
  59. {
  60. fichier = fil;
  61. }
  62. tpermission::tpermission(short court, string corde, float bateau, float barque) : tevenement(court, corde, bateau)
  63. {
  64. number = barque;
  65. }
  66. /**********************************************************************/
  67. //    fin déclaration des classes
  68. /**********************************************************************/


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 22:58:37    

Met plutôt:
  alpha = *((tevenement**)a);  
  beta = *((tevenement**)b);
 
Mais qsort et les tableaux, c'est plus du C que du C++ (où on utiliserait les collections de la STL)

 

[edtdd]--Message édité par Verdoux--[/edtdd]

Reply

Marsh Posté le 05-01-2002 à 23:01:35    

merci monsieur, ca à l'air de marcher
 
 
 :jap:  
 
 
ps: j'ai pas le choix (pour qsort()). C'est pour l'école.


---------------
oui oui
Reply

Marsh Posté le 05-01-2002 à 23:04:38    

CA MAAARCHE
 
 
Merci encore merci. Ca faisait des heures que j'étais dessus.
 
 
tu pourrais aussi expliquer beta = *((tevenement**)b);  
 
Parce que ca marche, mais je comprends pas trop ce que ca fait :sweat:

 

[edtdd]--Message édité par art_dupond--[/edtdd]


---------------
oui oui
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed