单例 - 在cpp文件中无法识别的静态成员

时间:2015-12-31 10:52:02

标签: c++ singleton

我正在尝试在我的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'

的未定义引用

1 个答案:

答案 0 :(得分:0)

或许,您应该在.cpp文件中初始化静态成员,如下所示

InputOutput* InputOutput::io = NULL;
pthread_mutex_t InputOutput::lock;

<强>原因

由于静态成员在类的所有实例之间共享,因此必须在一个且仅在一个地方定义它们。如果您在.h文件中定义它们,则会在每个.cpp文件中定义它们,其中包含导致链接错误的头文件。