Boost C ++ Singleton error LNK2001: неразрешенный внешний символ "private: static long Nsp :: HL :: flag" (? Flag @ HL @ Nsp @@ 0JA) - PullRequest
2 голосов
/ 31 марта 2010

Я пытаюсь создать шаблон многопоточного одноэлементного шаблона.

Заголовок:

class HL{

    public:
        static HL* getInstance();
    .........
    private:
        static HL* instance;
        static boost::once_flag flag;
        HL();
        static void initOnce();
}

CPP:

HL* HL::instance = NULL;

HL* HL::getInstance(){
    if(instance == NULL){
        boost::call_once(flag, initOnce);
    }
    return instance;
}

void HL::initOnce(){
    instance = new HL();
}

Я получаю эту ошибку:

error LNK2001: unresolved external symbol "private: static long Nsp::HL::flag" (?flag@HL@Nsp@@0JA)

Что не так?

1 Ответ

7 голосов
/ 31 марта 2010

Вам необходимо определить статическую переменную-член в файле cpp:

boost::once_flag Nsp::HL::flag;

Вы можете инициализировать его, если вам нужно (я не использовал boost::once_flag и не могу сказать вам, нужно ли его инициализировать или как):

boost::once_flag Nsp::HL::flag = {whatever goes here};
...