微控制器上的单例

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