Class function & TList.sort

Résolu
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 24 oct. 2006 à 16:17
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 27 oct. 2006 à 13:44
salut tout le monde, je viens de rencontrer un probleme plutot etrange, voire depitant :$
j'ai essayé de faire un TObjectList.sort avec class function commme fonction de comparaison. lors de l'appel de cet tri, j'ai une erreur de pointeur. Et lorsque je met un point d'arret sur la fonction de comparaison, il me met que l'adresse de Item2 est $4 . Encore plus etrange, la valeur de self correspond a un element de ma liste a trier ! Est ce que quelqu'un aurit une idée du pourquoi du comment?!!!

voici un "a peu pres" de mon code

type
    TMaListe = class(TObjectList)
       class function compare(item1, item2: pointer): integer;
    end;
   
    TMesObjetsDeListe = class
    public
       cmpChamp: integer;
    end;

class function TMaListe.compare(item1, item2: pointer): integer;
begin
    //ici : item1 est bien en element de ma liste, item2 est $4, self est un element de ma liste !!!
    result := compareValue(TMesObjetsDeListe(item1).cmpChamp, TMesObjetsDeListe(item2).cmpChamp);
end;

Dans une autre unité

procedure UneAutreClasse.UneProcedure;
var
    maListe: TMaListe;
begin
  //creation et remplissage de la liste
  ...
  maListe.sort(@TMaListe.compare);
  ...
end;

Merci de votre aide
A voir également:

17 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
25 oct. 2006 à 14:00
<TECH>
en fait il te met sur la pile (du pc) les parametres et l'adresse de l'objet ainsi que de la methode au lieu de mettre seulement l'adresse la function et les parametres. c'est du a ton erreur de type.

A mon avis, comme t'as une erreur de type, ce qui devrait etre les parametres sont en fait l'adresse de l'object(self) et l'adresse de ta methode ($4).
</TECH>

c'est pour cela qu'il fat declarer ta function EN DEHORS de ta class et cela marchera.

Essaie stp.

(TIPS: note que si tu veux, la function qui est en dehors de la class peut très bien appeler une methode de class de ta list)
3
Rejoignez-nous