我在涉及Clang的Mac OS X 10.12上遇到错误,并且它不想编译我的代码。我希望它通过编译器进行编译,但是在调用pthread_mutex_init时,它仍然存在“错误:成员初始化程序'pthread_mutex_init'没有命名非静态数据成员或基类”。我已经尝试在pthread_mutex_t声明前添加和删除“static”,我已经包含了我的pthread头文件
编辑:是的,我在file.cpp文件中包含了file.h。 编辑#2:我尝试了mutex_ =(mutex_pthread_t)PTHREAD_MUTEX_INITIALIZER,它给出了一些奇怪的错误,告诉我在某处插入“{”。
这是我的代码:
Name~Job~City~State
Jim~Manager~New York~NY
Fred~Clerk~Philadelphia~PA
Rhonda~Associate~Tampa~FL
答案 0 :(得分:1)
我假设您希望在所有Memory对象中共享一个互斥锁?
以下是2种(多种)方式,副作用略有不同:
#include <pthread.h>
class Memory {
// I am assuming that you wanted the mutex to be initialised
// at program start?
static bool init_mutex();
static pthread_mutex_t mutex_;
static bool initialised;
};
bool Memory::initialised = init_mutex();
bool Memory::init_mutex()
{
pthread_mutex_init(&mutex_, 0);
return true;
}
// or what about upon first use of a Memory?
class Memory2
{
struct impl {
impl() {
pthread_mutex_init(&mutex_, 0);
}
pthread_mutex_t mutex_;
};
static impl& get_impl()
{
static impl impl_;
return impl_;
}
Memory2()
{
get_impl();
}
};