单例继承链接器错误

Singleton Inheritance Linker Error

本文关键字:错误 链接 继承 单例      更新时间:2023-10-16

我是c++的新手,我得到了这个链接错误,

LNK2001:未解析的外部符号"private: static class DebugLog Singleton::instance" (?instance@?$Singleton@VDebugLog@@@@0VDebugLog@@A)

这里是有问题的代码:

template<typename T>
class Singleton {
public:
    static T& getInstance() {
        return instance;
    }
private:
    static T instance;
};
class DebugLog : public Singleton<DebugLog> {
public:
    void doNothing() {}
};
void main() {
    DebugLog::getInstance().doNothing();
}

有没有人能告诉我如何在不丢失DebugLog中的单例继承的情况下修复链接器错误?

谢谢。

你错过了:

template<typename T>
T Singleton<T>::instance;

在类定义之后插入这些行。

为了初始化静态数据成员,必须包含一个正式的在类之外的全局作用域中定义。

有关更多信息,请阅读此链接(节:Static members)

您需要在代码的某个地方实际定义static变量DebugLog Singleton::instance的实例,您只是声明它存在于某个地方,但从未实际创建它以真正存在。链接器正在查找。

相关文章: