probleme pour une fonction :( [c++] - Programmation
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.
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]
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
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
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]
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.
Marsh Posté le 05-01-2002 à 21:46:44
Ah c'est donc pas une erreur de compilation ! Fo l'dire!
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 ....
Marsh Posté le 05-01-2002 à 21:57:27
Code :
|
mais ca marche pas avec qsort()
[edtdd]--Message édité par art_dupond--[/edtdd]
Marsh Posté le 05-01-2002 à 21:59:02
mes classes (on ne sait jamais)
Code :
|
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]
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
[edtdd]--Message édité par art_dupond--[/edtdd]
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 )
Donc, comment faire ?
---------------
oui oui