类成员在链接时找不到首先是一个singleton模板基类,有个类成员装有实例的地址:C/C++ code#ifndef SINGLETO
类成员在链接时找不到
首先是一个singleton模板基类,有个类成员装有实例的地址:
- C/C++ code
#ifndef SINGLETON_H#define SINGLETON_Htemplate <typename T> class Singleton {public: static T* instance; static T& getInstance() { return *instance; } static T* getInstancePtr() { return instance; } Singleton() { instance = static_cast <T*> (this); } protected: Singleton(const Singleton<T>&); Singleton& operator=(const Singleton<T> &); };#endif // SINGLETON_H然后一个简单的FooBar类
- C/C++ code
#include "singleton.h"class FooBar: public Singleton<FooBar>{public: FooBar():foo(1),bar(2) {} int foo; int bar;};FooBar obj();int main() { FooBar::getInstance();}主程序的代码编译可以过,但链接时提示找不到“Singleton<FooBar>::instance”这个东西。我应当怎样做?
[解决办法]
基础语法不熟啊,要补课啊。
static成员要在类外实现啊。
[解决办法]
template <class T>
T* Singleton<T>::instance = new Singleton<T>();
[解决办法]
静态成员变量需要在类外部进行定义:
- C/C++ code
template <typename T> class Singleton {public: static T* instance; static T& getInstance() { return *instance; } static T* getInstancePtr() { return instance; } Singleton() { instance = static_cast <T*> (this); } protected: Singleton(const Singleton<T>&); Singleton& operator=(const Singleton<T> &); };template <class T>T* Singleton<T>::instance = new Singleton<T>(); // 定义静态成员///////////////////////////////////。。。Singleton模板实现放在此处。。。
[解决办法]
