微控制器上的单例
Singleton over microcontroller
我想在嵌入式项目中使用单例模式,但无法编译该项目。 class,现在,很简单,我没看懂问题。
错误是(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_ */
class 的静态成员,如 static RadioWrapper* mInstance
,
必须定义(H 文件中的内容只是一个声明)。
您需要添加:
/*static*/ RadioWrapper::mInstance = nullptr;
(/*static*/
前缀仅用于文档)。
这应该添加到 CPP 文件中,而不是 H 文件中(否则如果多次包含 H 文件,您将有多个定义。)
如果您使用的是 C++ 17,则可以使用一个 inline
变量,该变量可以在 H 文件中定义和初始化。在这里查看第二个答案:How to initialize static members in the header
我想在嵌入式项目中使用单例模式,但无法编译该项目。 class,现在,很简单,我没看懂问题。
错误是(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_ */
class 的静态成员,如 static RadioWrapper* mInstance
,
必须定义(H 文件中的内容只是一个声明)。
您需要添加:
/*static*/ RadioWrapper::mInstance = nullptr;
(/*static*/
前缀仅用于文档)。
这应该添加到 CPP 文件中,而不是 H 文件中(否则如果多次包含 H 文件,您将有多个定义。)
如果您使用的是 C++ 17,则可以使用一个 inline
变量,该变量可以在 H 文件中定义和初始化。在这里查看第二个答案:How to initialize static members in the header