我有两个文件如下。
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
代码有什么问题?
最佳答案
这种初始化风格在 C 中是允许的,但在 C++ 中是不允许的。
在 C++ 中,要么初始化而不命名字段,并希望没有人重新排序它们:
#define PPNFS_MUTEX_INITIALIZER {PTHREAD_MUTEX_INITIALIZER, 0, NULL}
或提供构造函数或工厂函数,或者(如果您使用的是 C++11)使用标准线程库而不是 posix 线程。
关于c++ - 我的代码 : error: expected primary-expression before ‘.’ token 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12025883/