5

tiger で xcode 2.4.1 を使用しています。以下を実行すると、すべて問題ありません。私がする時

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

これら2つのエラーが発生します

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

どうしてか分かりません。ただし、 pthread_mutex_t ミュート = PTHREAD_MUTEX_INITIALIZER; を実行すると、それは正常に動作します。なんで?

-編集-実行していませんが、これはコンパイルできるようです。なんで?は?

    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    mute = mutex;
4

2 に答える 2

17

PTHREAD_MUTEX_INITIALIZER定数初期化子であり、初期化時にのみ有効です。必ずしも整数型に展開しないマクロです。

あなたmute=mutex;は無効です-代わりに次を使用する必要があります:

pthread_mutex_init(&mute, NULL);

または、ミューテックスを動的に割り当てる場合:

m = malloc(sizeof(pthread_mutex_t)));
pthread_mutex_init(m, NULL);
于 2008-12-20T13:54:49.887 に答える
3
mute = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;

これは、このエラーの別の解決策です。

于 2015-07-10T06:11:05.553 に答える