c++ - 我的代码 : error: expected primary-expression before ‘.’ token 出错

标签 c++ pthreads mutex

我有两个文件如下。

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/

相关文章:

c++ - 如何检查一个字符串是否包含多个其他字符串?

c++ - ISO C++ 禁止声明没有类型的 "something"

c - c同步中的多线程

c++ - 如何正确删除 Mutex?

c++ - 将指向成员函数的指针转换为指向 C 函数的指针是一种好习惯吗

go - 在没有互斥体的情况下同时读取或写入时会发生什么

c++ - 为什么我的多线程作业队列崩溃?

c - 我们是否需要在收到来自 cond 变量的信号后解锁互斥锁?

c++ - 在带有 std::greater 附加参数的 std::map 上使用三元运算符

c++ - 使用 boost::make_shared 创建 vector 元素无法正常工作