2017-05-04 13 views
0

j'ai une fonction nommée course, avec la flotte * objet comme paramètre:Posix (C++) de non-concordance de type de paramètre

void* race(Fleet* fleet){ 
     //some code here 
    } 

et un autre argument thread posix:

vector<Fleet*> allfleet; //value has been passed/stored, ignore 
    pthread_create(&t[i],NULL,race,allfleet.at(i)); 

cependant erreur est apparu à la course argument dans la ligne pthread_create

error: Incompatible function parameter type "void *" and "fleet*" 

ive essayé tout, la conversion, le moulage, rien ne fonctionne.

Note: aucune autre erreur présente, juste l'incompatibilité de type

modifier:

il semble que la signature nécessite

void* function (void*) 

mais la course est

void* fuction (Fleet*) 
+2

Est-ce l'exemple que vous utilisez? Puisque l'erreur que vous obtenez, ne semble pas correspondre au code que vous nous montrez (rappelez-vous, C++ est un langage sensible à la casse!). –

+1

Essayez de définir 'race' avec le prototype correct. – molbdnilo

+3

Veuillez copier et coller les messages d'erreur. Aucun compilateur n'utiliserait le mot "param". – molbdnilo

Répondre

2

pthread_create call requires void *(*start_routine) (void *) argument . Votre fonction est incompatible avec cela. Essayez:

void* race(void* data) { 
    Fleet* fleet = (Fleet*)data; 
    //some code here 
}; 

Si vous utilisez C++ 11 I des conseils à l'aide std::thread au lieu des appels pthread.

+1

Ceci est correct. OP devrait juste avoir lu la documentation (et le message d'erreur)! –

+1

Pthreads nécessite également des fonctions avec liaison de langage C. –

+0

merci, ça aide. im un peu nouveau avec multithreading, donc le passage des pointeurs de type me rend confus. Au début, je pensais que le casting/conversion aiderait. – Hmmmmmmm