我想用一个静态的全局变量作为一个互斥。 当我尝试编译下面的代码:
//header file
class __declspec(dllexport) StateConservator
{
private:
StateConservator();
StateConservator(const StateConservator&);
protected:
const CString m_oldConf;
CContainer& m_container;
static bool x_mutex;
public:
StateConservator(CContainer& container, const CString& conf)
: m_container(container)
, m_oldConf(!x_mutex? container.GetConf():_T(""))
{
if(!x_mutex)
{
x_mutex= true;
m_container.SetConf(conf);
}
}
~StateConservator()
{
if(x_mutex)
{
x_mutex= false;
m_container.SetConf(m_oldConf);
}
}
};
//cpp file
bool StateConservator::x_mutex= false;
//consumer file
StateConservator cs(*pContainer, pDoc->GetConfiguration());
我得到的错误:
Consumer.obj : error LNK2001: unresolved external symbol "protected: static bool StateConservator::x_mutex" (?x_mutex@StateConservator@@1_NA)
拜托,我怎么能解决问题呢?
UPDATE
我创建了两个最小的方案只包含重要组成部分,以测试这个问题,他们的工作! 这是获得更奇怪!
更新2
注意课后__declspec(dllexport)的声明,即失踪。