C ++的错误消费文件链接引起的静态数据字段(C++ Error linking in consum

2019-10-22 07:10发布

我想用一个静态的全局变量作为一个互斥。 当我尝试编译下面的代码:

//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)的声明,即失踪。

Answer 1:

对不起,人。

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

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

我想我需要扩展到Visual Studio上色等项目的标签,用另一种颜色。 如果有人知道一个,我会很高兴。

感谢您的支持引起了我的烦恼。

UPDATE

注意课后__declspec(dllexport)的声明,即失踪。



文章来源: C++ Error linking in consumer file caused by static data field