ANSI C++ forbids implicit conversion from `void *' in argument passing - WARUM.??????



  • also ich hab folgendes problem:

    ich möchte mit hilfe der funktion 'pthread_create' einen neuen thread erstellen
    nur leider schaff ich es nicht der funktion korrekt die adresse der funktion zu übergeben die der thread ausführen soll.

    dieser code:

    pthread_t ptemp;
    pthread_create( &ptemp, NULL, (void*)&thread_main, NULL);
    

    produziert immer nur folgende fehlermeldung:

    "ANSI C++ forbids implicit conversion from `void *' in argument passing"

    komisch ist nur: ich hab die zeile eins zu eins aus einem programm übernommen
    bei dem es anscheinend funktioniert. liegts eventuell an der distribution.?
    also es läuft grad debian auf dem rechner.

    KANN MIR BITTE JEMAND HELFEN .?????



  • Schau dir die Deklaration an:

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
        void *(*start_routine)(void*), void *arg);
    

    Der 3. Parameter ist nicht vom Typ void*, sondern void (*start_routine)(void*). Lass mal das (void) weg.



  • "pthread_create(&ptemp, NULL, &thread_main, NULL);
    

    bewirkt das:

    "passing `void (*)()' as argument 3 of `pthread_create(pthread_t *, const pthread_attr_t , void * ()(void *), void *)'"

    ...



  • Die Deklaration von thread_main muss so aussehen:

    void* thread_main(void* param);
    


  • hey cool, DANKE es geht!


Anmelden zum Antworten