我正试图在嵌入式项目中使用Singleton模式,但我无法编译该项目。现在的课很简单,我不理解这个问题。
错误是(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,则可以使用可以在H文件中定义和初始化的inline
变量。请参阅此处的第二个答案:如何初始化标头中的静态成员