XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义



遗留代码库具有以下构造:

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

在头文件中添加

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

这仍然是一个越界的定义,但与特定的专业化无关。然后您应该能够删除行

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

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

相关内容

  • 没有找到相关文章

最新更新