2008-12-20 14 views
4

J'utilise xcode 2.4.1 sur tiger. Quand je fais ci-dessous tout va bien. quand je faispthread_mutex_t erreur d'initialisation

pthread_mutex_t mute; 
ImageMan() 
{ 
    dibSize=0; 
    mute = PTHREAD_MUTEX_INITIALIZER; 
} 

je reçois ces deux erreurs

error: expected primary-expression before '{' token 
error: expected `;' before '{' token 

Je ne sais pas pourquoi. Cependant, si je fais pthread_mutex_t mute = PTHREAD_MUTEX_INITIALIZER; ça fonctionne bien. Pourquoi?

-edit- Je ne l'ai pas exécuté mais cela semble compiler. Pourquoi? Hein?

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 
    mute = mutex; 

Répondre

16

PTHREAD_MUTEX_INITIALIZER est un initialiseur constant, valide uniquement lors de l'initialisation. C'est une macro qui ne s'étend pas nécessairement à un type intégral.

Votre mute=mutex; est invalid- à la place, vous devez utiliser:

pthread_mutex_init(&mute, NULL); 

ou si vous allouons mutex dynamiquement:

m = malloc(sizeof(pthread_mutex_t))); 
pthread_mutex_init(m, NULL); 
1
mute = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; 

Ceci est une autre solution pour cette erreur.

+0

Essayez toujours d'expliquer la réponse. – serenesat