【问题标题】:singleton -- static members unrecognized in the cpp file [duplicate]单例-cpp文件中无法识别的静态成员[重复]
【发布时间】: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'的未定义引用

【问题讨论】:

标签: c++ singleton


【解决方案1】:

您可能应该像下面这样在 .cpp 文件中初始化静态成员,

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

原因

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

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2012-10-20
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多