Неопределенная ссылка на Singleton :: instance - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь кодировать синглтон. Когда я его компилирую, я получаю много неопределенных ошибок, таких как instance и mutex_ в getSingleton()

неопределенная ссылка на 'Singleton :: instance'
неопределенная ссылка на 'Singleton :: mutex _'

#include<iostream>
#include<string>
#include<mutex>
using namespace std;
class Singleton{
public:
    static Singleton* getSingleton(){
        if(instance == NULL){
            mutex_.lock();
            if(instance == NULL){
                instance = new Singleton();
            }
            mutex_.unlock();
        }
        return instance;
    }
private:
    Singleton(){}
    Singleton& operator =(const Singleton& ){}
    static Singleton *instance;
    static mutex mutex_;
};
int main(){
    Singleton* singleton = Singleton::getSingleton();
    return 0;
}

1 Ответ

0 голосов
/ 20 марта 2019

Вы должны поместить определение этого статического поля в * .cpp файл, как там

class Singleton{
public:
    static Singleton* getSingleton(){
        if(instance == NULL){
            mutex_.lock();
            if(instance == NULL){
                instance = new Singleton();
            }
            mutex_.unlock();
        }
        return instance;
    }
private:
    Singleton(){}
    Singleton& operator =(const Singleton& ){}
    static Singleton *instance;
    static mutex mutex_;
};

mutex Singleton::mutex_;
Singleton * Singleton::instance;

Вы можете удалить мьютекс, если используете singleton myers и c ++ 11:

class Singleton {
public:
    static Singleton& Instance() {
        static Singleton S;
        return S;
    }

private:
    Singleton();
    ~Singleton();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...