对 Singleton::Singleton() 的未定义引用

Undefined reference to Singleton::Singleton()

本文关键字:Singleton 未定义 引用      更新时间:2023-10-16

我正在尝试从设计模式中获取第一个基本的单例示例工作,但这让我难倒了。

这段代码使用 g++ -c Singleton.cpp 干净地编译:

class Singleton {
public:
    static Singleton* Instance();
protected:
    Singleton();
private:
    static Singleton* _instance;
};
Singleton* Singleton::_instance = 0;
Singleton* Singleton::Instance() {
    if (_instance == 0) {
        _instance = new Singleton;
    }
    return _instance;
}

但是当我添加一个骨架main()并使用g++ Singleton.cpp进行编译时,我得到了undefined reference to 'Singleton::Singleton()'.

我错过了什么?

您从未为 添加定义

Singleton();

Singleton* Singleton::Instance()中使用

_instance = new Singleton;

通常,您应该并且可以布局单例,例如:

class Singleton {
public:
    static Singleton* Instance() { static Singleton s; return &s; }
    Singleton(const Singleton&) = delete;
    void operator=(const Singleton&) = delete;
private:
    Singleton() = default;
};