我正在尝试在我的io类上实现单例 我在头文件中删除了两个静态成员,但是cpp不知道它们。
class InputOutput{
//.h
private:
System* s;
static InputOutput* io;
static pthread_mutex_t lock;
}
//.cpp
InputOutput* InputOutput::getInstance(){
static bool initiallized = false;
if (pthread_mutex_init(&lock, NULL) != 0){
cout << "error in initiallize lock" << endl;
}
if(!initiallized){
pthread_mutex_lock(&lock);
if(!initiallized){
io = new InputOutput();
initiallized = true;
}
pthread_mutex_unlock(&lock);
}
return io;
}
问题是:
对InputOutput::lock'
undefined reference to
InputOutput :: io'
答案 0 :(得分:0)
或许,您应该在.cpp文件中初始化静态成员,如下所示
InputOutput* InputOutput::io = NULL;
pthread_mutex_t InputOutput::lock;
<强>原因强>
由于静态成员在类的所有实例之间共享,因此必须在一个且仅在一个地方定义它们。如果您在.h
文件中定义它们,则会在每个.cpp文件中定义它们,其中包含导致链接错误的头文件。