由静态数据字段引起的消费者文件中的 C++ 错误链接

C++ Error linking in consumer file caused by static data field

我想使用静态全局变量作为互斥体。当我尝试编译以下代码时:

//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)

请问我该如何解决这个问题?

更新

我创建了两个只包含测试问题的基本部分的最小程序,它们有效!越来越奇怪了!

更新 2

注意 __declspec(dllexport) 声明在 class 之后丢失了。

对不起,各位。

我在属于该项目的文件中定义了 StateConservator 的代码。但是在我意识到它在另一个文件中更有意义之后。

我没有意识到第二个文件是另一个解决方案的一部分。所以,我没有编译第二个解决方案,因此出现错误。

我想我需要 Visual Studio 的扩展来用另一种颜色为其他项目的选项卡着色。如果有人知道,我将不胜感激。

谢谢大家支持我造成的困扰

更新

请注意 class 之后的 __declspec(dllexport) 声明丢失了。