种成员在链接时找不到
类成员在链接时找不到
首先是一个singleton模板基类,有个类成员装有实例的地址:
然后一个简单的FooBar类
主程序的代码编译可以过,但链接时提示找不到“Singleton<FooBar>::instance”这个东西。我应当怎样做?
------解决方案--------------------
基础语法不熟啊,要补课啊。
static成员要在类外实现啊。
------解决方案--------------------
template <class T>
T* Singleton<T>::instance = new Singleton<T>();
------解决方案--------------------
静态成员变量需要在类外部进行定义:
首先是一个singleton模板基类,有个类成员装有实例的地址:
- C/C++ code
#ifndef SINGLETON_H #define SINGLETON_H 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> &); }; #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模板实现放在此处。。。
------解决方案--------------------