如何从主应用程序从 GetInstance 获取引用
How to get ref from GetInstance from main app?
我遵循这种单例模式,为什么错误LNK2001:在这种情况下未解析的外部符号? 我的问题看起来很相似,但我的问题不在于静态实例的定义。我的问题是解决另一个类的静态 GetInstance() 定义。
我的错误似乎不同,或者以前的答案不足。我已经尝试了"你需要在课堂外定义s_instance"的建议,这对我这个 cpp 菜鸟来说没有意义。我在标头中声明静态,并在 cpp 中定义它们的实现。
我也不需要关于单例线程安全的讲座,处理程序绑定使用 signals2...
状态.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: 静态类状态 * __cdecl状态::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();
看着这个问题,带有字段的静态方法我看不出这是如何应用的。我在 .h 中声明并在 cpp 文件中定义所有内容。
你能简化一下吗?
class State
{
public:
static State& GetInstance()
{
static State _instance;
return _instance;
}
};
看,它是隐藏的,它是按需的,它是线程安全的,它无需跳箍即可工作。
静态初始化确保在那里等效instance == NULL
,而无需任何额外的努力。它还确保在(之前)进程关闭时(假设正常终止)正确销毁。
唯一的假设是,您不希望能够"强制"重置单一实例。
我认为 sehe 答案是合适的,如果我能找到我自己使用单例,我会扎根。
另一方面,您的代码问题就在这里:
State* instance = NULL;
它应该是
State* State::instance = NULL;
我也刚刚注意到另一个错误,即:
State* GetInstance()
{
//...
}
应该是:
State* State::GetInstance()
{
//...
}
- 具有默认值的引用获取函数
- 很好的语法来获取对向量/数组数据的大小引用?
- C++ 获取函数在常量引用中按值返回的结果
- 获取对function_name的未定义引用
- 重载运算符*以获取对另一个类的实例的引用
- 我可以从其变量中获取对类对象的引用吗?
- 获取通用/前向引用地址有什么意义?
- 获取 std::函数以推断按引用传递/按值传递
- 如何使用 decltype 获取没有引用的指针?
- 在不使用模板的情况下获取 std::array 引用
- 从引用的Vector获取SEGFAULT
- 如何获取指向类(而不是对象)的引用/指针
- 通过基类指针获取派生类对象的引用
- 将从std::映射中获取的std::pair引用传递给接受std::对引用的函数
- 使用 future 时获取 C2280(尝试引用已删除的函数)
- 如何通过引用获取引用变量的地址?
- 在实现OpenSceneGraph时在Qt中获取引用问题
- 获取引用指向的对象地址
- C++ 线程获取引用参数编译失败
- 如何从主应用程序从 GetInstance 获取引用