XCode警告“此处需要实例化变量'Singleton <foo> :: _ instance',但没有定义可用

时间:2018-07-30 07:38:53

标签: c++ xcode macos-sierra

旧版代码库具有以下构造:

template< typename T >
class Singleton {
private:
    static T* _instance;
public:
    inline static T& instance() {
        if (_instance == 0) { // warning here
            _instance = new T;
        }
        return *_instance;
    }
};

通常这样使用:

class Foo : public Singleton<Foo>
{
};

警告是从包含Foo.hh的任何文件中产生的。

当前,Foo.cpp确实包含以下行:

template<>
Foo* Singleton<Foo>::_instance = nullptr;

但是它对编译没有帮助。在定义Foo之前​​,有没有办法提供Singleton :: _ instance的定义?

XCode 9.2 Mac OS X 10.12.6

1 个答案:

答案 0 :(得分:2)

在头文件中添加

template <typename T> T* Singleton<T>::_instance = nullptr;

这仍然是一个脱机定义,但与特定专业无关。然后,您应该可以删除该行

template<> Foo* Singleton<Foo>::_instance = nullptr;

因为上面的非专业定义已经对所有实例都做了相同的操作。