【发布时间】:2013-09-12 22:30:06
【问题描述】:
我正在遵循这种单例模式,why error LNK2001: unresolved external symbol in this case? 我的问题看起来很相似,但我的问题不在于静态实例的定义。我的问题是解决另一个类的静态 GetInstance() 定义。
我的错误似乎不同,或者以前的答案不充分。我已经尝试了建议,“你需要在类之外定义 s_instance”,这对我来说没有意义作为一个 cpp 菜鸟。我在标头中声明静态,并在 cpp 中定义它们的实现。
我也不需要关于单例线程安全的讲座,处理程序绑定使用信号2...
State.h
class State
{
public:
State(void);
~State(void);
static State* instance;
static State* GetInstance();
...
};
State.cpp
State::AppState mCurrentState;
boost::signals2::signal<void ()> mSignal;
State* instance = NULL;
State* GetInstance()
{
if( instance == NULL)
{
instance = new State();
return instance;
}
else
{
return instance;
}
}
所有编译都很好。然后当我尝试像这样访问单例时
State *state = State::GetInstance();,我收到“未解析的外部符号”错误。
错误 LNK2019:函数“public: virtual void __thiscall MesherApp::setup( void)" (?setup@MesherApp@@UAEXXZ)
还尝试了以下方法,因为有人说“在课堂外定义”——这甚至意味着什么?
class State
{
public:
...
}
static State* instance;
static State* GetInstance();
看看这个问题,Static method with a field 我不明白这是如何应用的。我在 .h 中声明并在 cpp 文件中定义所有内容。
【问题讨论】:
标签: c++ static compilation singleton