1

以下の2つのファイルがあります。

ppnfs_mutex.h

...
struct ppnfs_mutex_t
{
    pthread_mutex_t mutex;
    pthread_t owner;
    const char* context;
};
...

ppnfs_mutex.cc

#define PPNFS_MUTEX_INITIALIZER  \
    { .mutex = PTHREAD_MUTEX_INITIALIZER, .owner = 0, .context = NULL, }

struct ppnfs_mutex_t ppnfs_metadata_mutex = PPNFS_MUTEX_INITIALIZER; // line 6

g++このファイルをコンパイルするために使用しますが、次のようなエラーメッセージが表示されます。

ppnfs_mutex.cc:6:47: error: expected primary-expression before ‘.’ token

コードの問題は何ですか?

4

1 に答える 1

3

このスタイルの初期化はCでは許可されていますが、C++では許可されていません。

C ++では、フィールドに名前を付けずに初期化し、誰もフィールドを並べ替えないことを期待します。

#define PPNFS_MUTEX_INITIALIZER {PTHREAD_MUTEX_INITIALIZER, 0, NULL}

または、コンストラクターまたはファクトリ関数を提供するか、(C ++ 11を使用している場合)posixスレッドではなく標準のスレッドライブラリを使用します。

于 2012-08-19T10:47:42.123 に答える