由静态数据字段引起的消费者文件中的 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) 声明丢失了。
我想使用静态全局变量作为互斥体。当我尝试编译以下代码时:
//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) 声明丢失了。