单例继承链接器错误

时间:2011-10-13 07:33:13

标签: c++ visual-c++

我是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中的Singleton继承的情况下修复链接器错误吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

你错过了:

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

在课程定义后插入这些行。

  

为了初始化静态数据成员,我们必须包含一个正式的   在全球范围内,在课堂外定义。

有关详细信息,请阅读this link (章节:静态成员)

答案 1 :(得分:1)

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

这是some examples如何正确行事。