gpt4 book ai didi

c++ - 如何从主应用程序的 GetInstance 获取引用?

转载 作者:行者123 更新时间:2023-11-30 00:35:32 25 4
gpt4 key购买 nike

我正在遵循这种单例模式,why error LNK2001: unresolved external symbol in this case?我的问题看起来很相似,但我的问题不在于静态实例 的定义。我的问题是解析来自另一个类的静态 GetInstance() 定义。

我的错误似乎有所不同,或者以前的答案不充分。我试过这些建议,“你需要在类外定义 s_instance”,这对我这个 cpp 菜鸟来说没有意义。我在 header 中声明静态,并在 cpp 中定义它们的实现。

我也不需要关于单例线程安全的讲座,处理程序绑定(bind)使用 signals2...

State.h

class State
{
public:
State(void);
~State(void);

static State* instance;
static State* GetInstance();
...

};

状态.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: static class State * __cdecl State::GetInstance(void)” (?GetInstance@State@@SAPAV1@XZ) 在函数“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 文件中定义所有内容。

最佳答案

你能简化吗?

class State
{
public:

static State& GetInstance()
{
static State _instance;
return _instance;
}
};

看,它是隐藏的、按需的、线程安全的并且无需跳环即可工作。

静态初始化确保了 instance == NULL 的等效性,无需任何额外的努力。它还确保在(之前)进程关闭时(假设正常终止)进行适当的销毁。

唯一的假设是您不希望能够“强行”重置单例实例。

关于c++ - 如何从主应用程序的 GetInstance 获取引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18775333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com