1

我有两个文件如下。

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 回答