singleton--cpp文件中无法识别的静态成员

singleton -- static members unrecognized in the cpp file

本文关键字:识别 静态成员 文件 singleton--cpp      更新时间:2023-10-16

我正在尝试在io类上实现singleton我清除了头文件中的两个静态成员,但是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'

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

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

原因

由于静态成员是在类的所有实例之间共享的,所以它们必须在一个并且只能在一个地方定义。如果在.h文件中像上面那样定义它们,那么它们将在每个.cpp文件中定义,该文件包括导致链接错误的头文件。