我正在尝试在嵌入式项目中使用单例模式,但我无法编译该项目。现在的课程非常简单,我不明白这个问题。
错误是(48,在我的代码中是实例函数的最后一行):
RadioWrapper.h:48: undefined reference to `RadioWrapper::mInstance'
有任何想法吗?
#define RADIOWRAPPER_H_
class RadioWrapper
{
protected:
RadioWrapper() {};
~RadioWrapper() { mInstance = NULL;}
public:
static RadioWrapper* instance (void)
{
if (!mInstance)
{
mInstance = new RadioWrapper();
return mInstance;
}
else
{
return mInstance;
}
}
void setRx (void);
private:
static RadioWrapper* mInstance;
};
#endif /* RADIOWRAPPER_H_ */
必须定义类的静态成员,例如static RadioWrapper* mInstance
(您在 H 文件中拥有的只是一个声明)。
您需要添加:
/*static*/ RadioWrapper::mInstance = nullptr;
(/*static*/
前缀仅用于文档)。
这应该添加到 CPP 文件中,而不是 H 文件中(否则如果 H 文件包含多次,您将有多个定义。)
如果您使用的是 C++ 17,则可以使用inline
可以在 H 文件中定义和初始化的变量。请参阅此处的第二个答案:如何在标题中初始化静态成员
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句