【发布时间】:2015-12-31 10:52:01
【问题描述】:
我正在尝试在我的 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 toInputOutput::io'的未定义引用
【问题讨论】:
-
类的静态成员必须在 .cpp 文件中定义。它们只在标题中声明。
-
你用的是c++11吗?您可以使用 c++11 改进您的 signleton。检查此链接elvisoric.blogspot.ba/2015/09/singleton-design-pattern.html