Problem mit qsort



  • Hi Leute,

    ich hab ein Problem bei der Benutzung der qsort-Funktion

    void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

    Meine Vergleichsfunktion sieht so aus:

    int  SortModeList( const VOID* arg1, const VOID* arg2 );
    

    Der Aufruf von qsort so:

    qsort((void *)aMode, (size_t)dwNumModes, (size_t)sizeof(D3DDISPLAYMODE), SortModeList);
    

    Jetzt motzt aber der compiler und sagt:

    error C2664: 'qsort' : Konvertierung des Parameters 4 von 'int (const void *,const void *)' in 'int (__cdecl *)(const void *,const void *)' nicht moeglich
    Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein

    Woran liegt das, was kann ich öndern? Danke schon mal im Voraus...

    Mfg, smasher1985



  • probiers mal mit dem & operator:

    qsort (..., &SortModeList);
    


  • OK, ich erkenne jetzt wo das Problem ist - und zwar ist meine Vergleichsfunktion nicht global definiert, sondern Member-Funktion einer Klasse. Deshalb kommt bei Verwendung des & Operators folgende Compiler-Meldung:

    error C2276: '&' : Ungueltige Operation auf Ausdruck einer gebundenen Member-Funktion

    Muss meine Vergleichs-Funktion global sein, oder gibt es eine Möglichkeit das auch so zu realisieren?

    Mfg, Smasher1985



  • sie muss global sein. qsort wird nichts anderes akzeptieren.
    hör dich mal nach dem sort der standardbibliothek und funktionsbindern um



  • mache die member funktion static



  • @Dimah: Danke, das war's 😡


Anmelden zum Antworten